0

所以我有两个模型,Person它们Film处于多对多关系中。我的目标是抢一部电影,并输出至少出现在 10 部电影中的人。

例如,我可以通过以下方式单独获取计数:

>>> Person.objects.get(short__istartswith = "Matt Damon").film_set.count()
71

但是,如果我尝试过滤掉特定电影的所有演员:

>>> Film.objects.get(name__istartswith="Saving Private Ryan").actors.all().annotate(film_count=Count('film')).filter(film_count__gte=10)
[]

它返回一个空集,因为如果我手动查看每个人film_count,它是 1,即使像马特达蒙这样的演员(如上所示)已经在我的数据库中的 71 部电影中。

正如您在此查询中看到的那样,注释不起作用:

>>> Film.objects.get(name__istartswith="Saving Private Ryan").actors.all().annotate(film_count=Count('film'))[0].film_count
1
>>> Film.objects.get(name__istartswith="Saving Private Ryan").actors.all().annotate(film_count=Count('film'))[0].film_set.count()
7

我似乎无法找到一种方法来过滤它film_set.count()

4

1 回答 1

0

所以我想出了一种方法,我不确定这是最有效的查询,首先注释所有的人,然后尝试根据电影和电影数量对其进行过滤:

Person.objects.annotate(film_count=Count('film')).filter(film__name__istartswith="Saving Private Ryan").filter(film_count__gte=10)
于 2013-10-29T04:38:27.373 回答