Django根据多对多关系的数量进行查询

时间:2013-10-16 12:39:32

标签: django django-queryset

所以我有FilmPerson模型,这些模型有很多关系,因为每部电影都可以包含很多演员/演员,每个演员/演员都可以在很多电影中。

我想知道是否有办法根据演员有多少部电影来限制查询。

例如,

Person.objects.all()

将返回数据库中的所有人,而

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

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

我想知道是否可以说,查询Person中至少有10部电影的所有film_set个对象。

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

1 个答案:

答案 0 :(得分:1)

您可以使用aggregation执行此操作。

from django.db.models import Count
people = Person.objects.all().annotate(film_count=Count('film')).filter(film_count__gte=10)