50 votes

Comment puis-je itérer sur ManyToManyField ?

Une question simple et pourtant je ne trouve pas de réponse.

J'ai un modèle avec un champ ManyToMany :

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

alors dans une fonction différente je veux faire ceci:

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

Mais ça me donne :

 TypeError: 'instancemethod' object is not iterable

Comment puis-je itérer sur un manyToManyField ?

100voto

Abid A Points 1502

Essayez d'ajouter le () après all : myStuff.things.all()

0voto

niko.makela Points 163

Comme Abid A déjà répondu, il vous manque des crochets ()

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

0voto

jsh Points 1067

ManyToManyField semble avoir un type de gestionnaire différent de celui de votre classe Django de base. En regardant la source ici, https://github.com/django/django/blob/master/django/db/models/fields/related_descriptors.py#L821 , il semble que vous recherchiez le champ related_val qui semble contenir le tuple de références d'objets liés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X