所以我有两个模型,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,即使像Matt Damon这样的演员(如上所示)已经在我的数据库中的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()
答案 0 :(得分:0)
所以我认为一种方法,我不确定是最有效的查询,是先注释所有人,然后尝试根据电影和电影数过滤它:
Person.objects.annotate(film_count=Count('film')).filter(film__name__istartswith="Saving Private Ryan").filter(film_count__gte=10)