Django 查询相关字段计数

发布于 2024-11-17 16:08:08 字数 183 浏览 4 评论 0原文

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

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

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

我错过了什么?

I've got an app where users create pages. I want to run a simple DB query that returns how many users have created more than 2 pages.

This is essentially what I want to do, but of course it's not the right method:

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

What am I missing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

花心好男孩 2024-11-24 16:08:08

您应该使用 聚合

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

You should use aggregates.

from django.db.models import Count
User.objects.annotate(page_count=Count('page')).filter(page_count__gte=2).count()
旧夏天 2024-11-24 16:08:08

就我而言,我没有像 其他答案,它也很好用。

from django.db.models import Count

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

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)
酷到爆炸 2024-11-24 16:08:08

将aggregate() 函数与django.db.models 方法一起使用!
这非常有用,并且不会真正压倒其他注释聚合列。
*在计算的最后一步使用aggregate(),它将你的查询集转换为字典。

下面是我使用它们的代码片段。

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

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"))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文