2011-01-11 2 views
1

У меня есть две модели. Модель Artist и модель Album. Там есть ManyToManyField, соединяющий два, так как в альбоме может быть более одного исполнителя (сотрудничество и т. П.).Отношения «многие-ко-многим»: запрос для объектов с одним значением

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

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

ответ

4
Album.objects.annotate(n_artists=Count("artists')).filter(n_artists=1).filter(artist=some_awesome_artist) 

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