web-dev-qa-db-fra.com

Comment puis-je itérer sur ManyToManyField?

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

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 cela me donne:

TypeError: 'instancemethod' object is not iterable

Comment puis-je itérer sur un manyToManyField?

31
Goro

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

71
Abid A

ManyToManyField semble avoir un type de gestionnaire différent de celui de votre classe de base Django. 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.

0
jsh