Django 查询相关字段计数
Posted
技术标签:
【中文标题】Django 查询相关字段计数【英文标题】:Django Query Related Field Count 【发布时间】:2011-09-25 10:17:20 【问题描述】:我有一个用户可以在其中创建页面的应用。我想运行一个简单的数据库查询,返回有多少用户创建了超过 2 个页面。
这本质上是我想做的,但当然不是正确的方法:
User.objects.select_related('page__gte=2').count()
我错过了什么?
【问题讨论】:
【参考方案1】:你应该使用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"'))
【参考方案2】:
就我而言,我没有像other answer 那样使用最后一个.count()
,它也很好用。
from django.db.models import Count
User.objects.annotate( our_param=Count("all_comments")).filter(our_param__gt=12)
【讨论】:
【参考方案3】:在 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"))
【讨论】:
以上是关于Django 查询相关字段计数的主要内容,如果未能解决你的问题,请参考以下文章