如何根据多对多关系的数量过滤django查询集?

时间:2011-07-07 13:40:40

标签: django django-queryset

我有以下情况: 一个人可以属于多个组织,一个组织可以有多个成员(人员)

class Person(models.Model):

    organizations = ManytoManyField(Organization)

我想按成员数量对组织进行分类:

拥有0名成员的组织

拥有1名成员的组织

拥有5名成员或更多成员的组织,等等。

对于这些类别中的每一个,我只想对数据库使用一个查询。这意味着出于性能原因,我根本不想使用for循环。

最后的问题是:如何基于它拥有的多种关系的数量来过滤django查询集?

由于

1 个答案:

答案 0 :(得分:1)

在QuerySet上使用Django聚合,尤其是Count。

from django.db.models import Count
Person.objects.aggregate(Count('organizations'))

有关此主题的更多信息:https://docs.djangoproject.com/en/dev/topics/db/aggregation/

(但我也认为在某个地方有.Count()或类似的缩写。)