Отношения «многие ко многим»: запрос объектов с одним значением - PullRequest
1 голос
/ 11 января 2011

У меня две модели. Модель Artist и модель Album. Существует ManyToManyField, соединяющий их, поскольку в альбоме может быть несколько исполнителей (совместная работа и т. П.).

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я делаю простой запрос типа Album.objects.filter(artists=1), он, как и ожидалось, показывает все объекты Album, которым этот художник приписан. Что я хочу сделать, так это найти все альбомы, в которых этот исполнитель является единственным исполнителем (их релизы, без сотрудничества).

(Я не знаком с предложением extra(), но я уверен, что это может иметь какое-то отношение к решению этой проблемы, поэтому любая помощь в этом отношении очень ценится.)

1 Ответ

4 голосов
/ 11 января 2011
Album.objects.annotate(n_artists=Count("artists')).filter(n_artists=1).filter(artist=some_awesome_artist)

По сути, идея состоит в том, чтобы найти все альбомы, у которых есть ровно 1 исполнитель (путем аннотирования и фильтрации), а затем отфильтровать.

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