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 查询相关字段计数的主要内容,如果未能解决你的问题,请参考以下文章

Django - 每个不同状态的查询计数

在 django 的查询集中获取对象的计数

在 django 映射中如何获得完整的选择字段计数

Django QuerySet:用于计数值出现的附加字段

在 Django 中有效地获取相关模型的计数

带有额外选择的 Django 查询集计数