Django查询相关字段计数


68

我有一个应用程序,用户可以在其中创建页面。我想运行一个简单的数据库查询,该查询返回创建了2个以上页面的用户数。

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

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

我想念什么?

Answers:


122

您应该使用聚合

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"'))
Rmatt

2

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

from django.db.models import Count

User.objects.annotate( our_param=Count("all_comments")).filter(our_param__gt=12)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.