我有一个用户创建页面的应用程序。我想运行一个简单的数据库查询,返回有多少用户创建了超过2页。
这基本上就是我想要做的,但当然这不是正确的方法:
User.objects.select_related('page__gte=2').count()
我错过了什么?
答案 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"))