#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
.