Django查询相关字段计数

时间:2011-06-29 18:57:25

标签: django django-queryset django-select-related

我有一个用户创建页面的应用程序。我想运行一个简单的数据库查询,返回有多少用户创建了超过2页。

这基本上就是我想要做的,但当然这不是正确的方法:

User.objects.select_related('page__gte=2').count()

我错过了什么?

3 个答案:

答案 0 :(得分:94)

您应该使用aggregates

from django.db.models import Count
User.objects.annotate(page_count=Count('page')).filter(page_count__gte=2).count()

答案 1 :(得分:1)

在我的情况下,我没有像other answer一样使用上一个.count(),它也很好用。

from django.db.models import Count

User.objects.annotate( our_param=Count("all_comments")).filter(our_param__gt=12)

答案 2 :(得分:0)

将aggregate() 函数与django.db.models 方法一起使用! 这非常有用,并且不会与其他注释聚合列真正粉碎。 *在计算的最后一步使用aggregate(),它将您的查询集转换为dict。

下面是我使用它们的代码片段。

cnt = q.values("person__year_of_birth").filter(person__year_of_birth__lte=year_interval_10)\
               .filter(person__year_of_birth__gt=year_interval_10-10)\
               .annotate(group_cnt=Count("visit_occurrence_id")).aggregate(Sum("group_cnt"))