多对多关系:查询具有单一值的对象

时间:2011-01-11 06:43:34

标签: python django django-queryset django-orm

我有两个型号。 Artist模型和Album模型。有一个ManyToManyField连接两者,因为一张专辑可以有多个艺术家(合作等)。

我遇到的问题是当我执行简单的Album.objects.filter(artists=1)类型查询时,它会显示所有具有该艺术家归因于它的Album个对象。我想要做的是找到那位艺术家是唯一的艺术家(他们的发行版,没有合作)的所有专辑。

(我不熟悉extra()条款,但我确信它可能与此解决方案有关,因此非常感谢任何帮助。)

1 个答案:

答案 0 :(得分:4)

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

基本上,我们的想法是找到所有拥有1位艺术家的专辑(通过注释和过滤),然后过滤掉。