How can I iterate over ManyToManyField?


Question

A simple question and yet I can't find an answer for it.

I have a model with a ManyToMany field:

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

then in a different function I want to do this:

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

But that is giving me:

TypeError: 'instancemethod' object is not iterable

How can I iterate over a manyToManyField ?

1
36
3/5/2012 10:59:52 PM

Accepted Answer

Try adding the () after all: myStuff.things.all()

78
3/5/2012 11:01:11 PM

ManyToManyField seems to have a different kind of Manager than your basic Django class. Looking at the source here, https://github.com/django/django/blob/master/django/db/models/fields/related_descriptors.py#L821, it seems you are looking for the related_val field which appears to contain the tuple of related objects references.


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon