73

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

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

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

我错过了什么?

4

3 回答 3

137

您应该使用聚合

from django.db.models import Count
User.objects.annotate(page_count=Count('page')).filter(page_count__gte=2).count()
于 2011-06-29T19:05:40.927 回答
3

就我而言,我没有.count()其他答案那样使用 last ,它也很好用。

from django.db.models import Count

User.objects.annotate( our_param=Count("all_comments")).filter(our_param__gt=12)
于 2017-06-24T05:59:30.843 回答
0

将 aggregate() 函数与 django.db.models 方法一起使用!这非常有用,并且不会与其他注释聚合列真正崩溃。*在计算的最后一步使用聚合(),它将你的查询集变成字典。

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

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"))
于 2021-04-03T21:17:54.563 回答