Как я могу перебрать ManyToManyField? - PullRequest
33 голосов
/ 06 марта 2012

Простой вопрос, и все же я не могу найти ответ на него.

У меня есть модель с полем ManyToMany:

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

, тогда в другой функции я хочусделать это:

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

Но это дает мне:

TypeError: 'instancemethod' object is not iterable

Как я могу выполнить итерацию по manyToManyField?

Ответы [ 3 ]

75 голосов
/ 06 марта 2012

Попробуйте добавить () после all: myStuff.things.all()

0 голосов
/ 10 сентября 2016

ManyToManyField, похоже, имеет менеджер другого типа, чем ваш базовый класс Django. Глядя на источник здесь, https://github.com/django/django/blob/master/django/db/models/fields/related_descriptors.py#L821, кажется, что вы ищете поле related_val, в котором, по-видимому, содержится кортеж ссылок на связанные объекты.

0 голосов
/ 06 марта 2012

Как и Abid A уже ответил, у вас нет скобок ()

for t in myStuff.things.all():
    print t.myStuffs.all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...