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

Django 1.11注释子查询聚合

Django 1.11注释子查询聚合

也可以创建的子类Subquery,以更改其输出sql。例如,你可以使用:

class SQCount(Subquery):
    template = "(SELECT count(*) FROM (%(subquery)s) _count)"
    output_field = models.IntegerField()

然后,你将像使用原始Subquery类一样使用它:

spaces = Space.objects.filter(carpark=OuterRef('pk')).values('pk')
Carpark.objects.annotate(space_count=SQCount(spaces))

你可以将此技巧(至少在postgres中)与一系列聚合函数结合使用:我经常使用它来构建值数组或求和。

我只需要从模型中删除规定的元顺序。你可以通过.order_by()在子查询添加一个空白来实现。在我的代码中,这意味着:

spaces = Space.objects.filter(carpark=OuterRef('pk')).order_by().values('carpark')
count_spaces = spaces.annotate(c=Count('*')).values('c')
Carpark.objects.annotate(space_count=Subquery(count_spaces))
Go 2022/1/1 18:22:20 有403人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

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

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

请先登录

推荐问题


联系我
置顶