【发布时间】:2011-09-25 10:17:20
【问题描述】:
我有一个用户可以在其中创建页面的应用。我想运行一个简单的数据库查询,返回有多少用户创建了超过 2 个页面。
这本质上是我想做的,但当然不是正确的方法:
User.objects.select_related('page__gte=2').count()
我错过了什么?
【问题讨论】:
标签: django django-queryset django-select-related
我有一个用户可以在其中创建页面的应用。我想运行一个简单的数据库查询,返回有多少用户创建了超过 2 个页面。
这本质上是我想做的,但当然不是正确的方法:
User.objects.select_related('page__gte=2').count()
我错过了什么?
【问题讨论】:
标签: django django-queryset django-select-related
你应该使用aggregates。
from django.db.models import Count
User.objects.annotate(page_count=Count('page')).filter(page_count__gte=2).count()
【讨论】:
super(ModelAdmin, self).queryset(request ).annotate(o_count=Count('v__g_o') ).annotate(timedout_o_count=Count('v__g_o__d_t__exact="AUTO_DECLINE"'))
就我而言,我没有像other answer 那样使用最后一个.count(),它也很好用。
from django.db.models import Count
User.objects.annotate( our_param=Count("all_comments")).filter(our_param__gt=12)
【讨论】:
在 django.db.models 方法中使用 aggregate() 函数! 这非常有用,并且不会与其他注释聚合列真正崩溃。 *在计算的最后一步使用聚合(),它将你的查询集变成字典。
下面是我使用它们的代码 sn-p。
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"))
【讨论】: