2012-03-05 24 views
30

Una domanda semplice e ancora non riesco a trovare una risposta per questo.Come posso eseguire iterazioni su ManyToManyField?

Ho un modello con un campo ManyToMany:

class Stuff(models.Model): 
    things = models.ManyToManyField(Thing) 

poi in una funzione diversa che voglio fare questo:

myStuff = Stuff.objects.get(id=1) 
for t in myStuff.things.all: 
    # ... 

Ma che mi sta dando:

TypeError: 'instancemethod' object is not iterable 

Come posso eseguire iterate su manyToManyField?

+0

"instancemethod object" dovrebbe averti avvertito che si tratta di un metodo (necessita di parentesi), non di un iterabile. – mpen

risposta

64

Provate ad aggiungere la () dopo all: staffe myStuff.things.all()

+13

Nel modello usa 'myStuff.things.all' (omettendo il()) – Nathaniel

-2

Come Abid A già risposto, si sta perdendo()

for t in myStuff.things.all(): 
    print t.myStuffs.all() 
+3

perché lo hai ripetuto? e il tuo esempio è rotto ... cosa stai cercando di stampare (c'è un colon alla fine)? – mpen

+1

A quel punto non avevo il permesso di scrivere commenti qui e il mio scopo era quello di mostrare un vero esempio funzionante di stampaggio for-loop delle cose che non erano in grado di mostrare. Ci sono due punti perché in Python un ciclo for ha sempre bisogno di uno! –

+0

Credo che mi stavo riferendo al colon extra che hai modificato. Ma abbastanza giusto ... Trovo esempi completi più facili da seguire. – mpen

Problemi correlati