Django 查询相关字段计数

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

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

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

我错过了什么?

37668 次浏览

You should use aggregates.

from django.db.models import Count
User.objects.annotate(page_count=Count('page')).filter(page_count__gte=2).count()

In my case, I didn't use last .count() like the other answer and it also works nice.

from django.db.models import Count


User.objects.annotate( our_param=Count("all_comments")).filter(our_param__gt=12)

use aggregate() function with django.db.models methods! this is so useful and not really crushing with other annotation aggregated columns. *use aggregate() at the last step of calculation, it turns your queryset to dict.

below is my code snippet using them.

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