Django MultipleObjectsReturned

#django #many-to-many

#django #многие ко многим

Вопрос:

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

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

записи = Entries.objects.get(автор = пользователь)
для записи в записи:
 теги[entry.pk ] = запись.теги.все()

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

Ответ №1:

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

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

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

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

Ответ №2:

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

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

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