2012-03-05 30 views
30

Una pregunta simple y, sin embargo, no puedo encontrar una respuesta.¿Cómo puedo iterar sobre ManyToManyField?

que tienen un modelo con un campo ManyToMany:

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

entonces en una función diferente que desee hacer esto:

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

Pero eso me está dando:

TypeError: 'instancemethod' object is not iterable 

¿Cómo puedo iterar sobre manyToManyField?

+0

"objeto instancia objeto" debería haberle avisado de que es un método (necesita paréntesis), no es iterable. – mpen

Respuesta

64

Trate de añadir los () después all: soportes myStuff.things.all()

+13

En la plantilla use 'myStuff.things.all' (omitiendo el()) – Nathaniel

-2

Como Abid A ya ha respondido, se echa en falta()

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

¿por qué lo repitió? y su ejemplo está roto ... ¿qué está tratando de imprimir (hay dos puntos al final)? – mpen

+1

Para entonces no tenía permiso para escribir comentarios aquí y mi propósito era mostrar un ejemplo real de trabajo de impresión for-loop de todo lo que no se podía mostrar. ¡Hay dos puntos porque en Python un for-loop siempre necesita uno! –

+0

Creo que me refería al colon extra que editó. Pero es justo ... Sí puedo encontrar ejemplos completos más fáciles de seguir. – mpen

Cuestiones relacionadas