首页 > 解决方案 > 使用聚合将原始 SQL 查询集成到 Django ORM 中

问题描述

我正在尝试将此 RAW 查询集成到 django ORM 查询中,但我在应用原始查询和 orm 查询时遇到了问题

与 postgres 查询工具配合使用的原始查询:

"SELECT SUM(counter),type, manufacturer 
FROM sells GROUP BY manufacturer, type"

现在我尝试将其集成到 django-orm 查询中,如下所示:

res_postgres = Sells.objects.all().values('manufacturer','type','counter').aggregate(cnter=Sum('counter'))

但我得到的只是一个柜台中心......

我需要的是看起来像这样的原始查询的结果

在此处输入图像描述

我还尝试过使用值和字段名称。像 Sells.objects.values('manufacturer'....).aggregate(cnter=Sum(counter)) 但是 django 正在构建一个集成了 GROUP BY id 的查询。这不是我需要的。我需要聚合整个数据而不是对象级别,同时保留其他字段的信息。

当我使用 Cars.objects.raw() 时,它会询问我主键,我也不需要。

这里有什么提示吗?Django ORM 有可能吗?

标签: django

解决方案


使用annotate(...)代替aggregate()

res_postgres = Sells.objects.values('manufacturer','type').annotate(cnter=Sum('counter'))

推荐阅读