Django MultipleObjectsReturned - PullRequest
       0

Django MultipleObjectsReturned

3 голосов
/ 02 ноября 2011

Допустим, у меня есть запись в блоге с несколькими тегами. Поле тегов - это ManyToMany в моей модели. Я хочу взять все записи в блоге и для каждой записи я хочу получить все теги.

В принципе, я бы сделал что-то подобное

entries = Entries.objects.get(author=user)
for entry in entries:
     tags[entry.pk] = entry.tags.all()

Проблема в том, что я получаю ошибку MultipleObjectsReturned.

Ответы [ 2 ]

11 голосов
/ 02 ноября 2011

Если вы хотите вернуть все записи с author=user, тогда используйте filter()

entries = Entries.objects.filter(author=user)

В данный момент вы используете get(), который ожидает вернуть один Entries объект.Поскольку существует более одного Entries с author=user, вы получаете ошибку Entries.MultipleObjectsReturned.

Обратите внимание, что с Django принято использовать для вашей модели имя единственного числа Entry вместомножественное число Entries.

3 голосов
/ 02 ноября 2011

Вы используете get, когда вы должны использовать filter.

Используйте get только когда возможен только один результат. В этом случае вы получите обратно сам объект, , а не набор запросов. Тогда нечего зацикливаться, поэтому for посторонний.

Если вы действительно ожидаете набор запросов, вы должны использовать filter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...