0

所以我FilmPerson模特有多对多的关系,因为每部电影可以包含许多演员/女演员,并且每个演员/女演员可以出现在许多电影中。

我想知道是否有办法根据演员拥有的电影数量来限制查询。

例如,

Person.objects.all()

将返回数据库中的每个人,而

Person.objects.all()[0].film_set.all()

将返回一组包含数据库中第一人的所有电影。

我想知道是否可以说,查询所有Person在其film_set.

我知道一种方法是只查询所有 Person 对象,然后是 if 语句 iflen(film_set.all()) > n循环遍历它们并从中创建一个子列表,但是有没有更好的方法不涉及遍历整个数据库?

4

1 回答 1

1

您可以使用聚合来做到这一点。

from django.db.models import Count
people = Person.objects.all().annotate(film_count=Count('film')).filter(film_count__gte=10)
于 2013-10-16T13:01:02.090 回答