您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Django中过滤用于计数注释的对象?

如何在Django中过滤用于计数注释的对象?

Django 2.0中的条件聚合使你可以进一步减少过去的流量。这也将使用Postgres的filter逻辑,该逻辑比求和的情况要快一些(我见过像20-30%这样的数字被打乱)。

无论如何,就你的情况而言,我们正在研究简单的东西:

from django.db.models import Q, Count
events = Event.objects.annotate(
    paid_participants=Count('participants', filter=Q(participants__is_paid=True))
)

在文档中还有一个单独的部分,关于注释过滤。它和条件聚合是一样的东西,但是更像上面的例子。无论哪种方式,这都比我之前做的粗糙子查询要健康得多。

刚刚发现Django 1.8具有新的条件表达式功能,所以现在我们可以这样做:

events = Event.objects.all().annotate(paid_participants=models.Sum(
    models.Case(
        models.When(participant__is_paid=True, then=1),
        default=0, output_field=models.IntegerField()
    )))
Go 2022/1/1 18:14:12 有657人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶