首页 > 解决方案 > 加入和分组 Django 查询集

问题描述

m1 = myModel.objects.filter(...)
m2 = myModel.objects.filter(...)

n1 = m1.values("date").annotate(car_crashes=Sum('car_crashes') * 1).values("date", "car_crashes")
n2 = m2.values("date").annotate(car_crashes=Sum('car_crashes') * 2).values("date", "car_crashes")

使用这段代码,我得到了 n1 和 n2 两个查询集:

<QuerySet [{'date': datetime.date(2008, 4, 1), 'car_crashes': Decimal(1.000)}, ... ]>
<QuerySet [{'date': datetime.date(2011, 4, 1), 'car_crashes': Decimal(2.000)}, ... ]>

请注意,它们的大小可能不同,并且某些日期可能在一个查询集中,但不在另一个查询集中。

如何在date字段上对这两个查询集进行分组并求和car_crashes

我正在尝试这个:

(n1 | n2).annotate(car_crashes=Sum('car_crashes')).values("date", "car_crashes")

和这个

n1.union(n2).annotate(cc=Sum('car_crashes'))

无法计算总和('car_crashes'):'car_crashes' 是一个聚合

标签: pythondjangodjango-orm

解决方案


使用union运算符:

qs3 = m1.union(m2)
qs3.annotate(car_crashes=Sum('car_crashes')).values("date", "car_crashes")

我不知道为什么你不能像显示的那样使用 m1 和 m2 而不是 n1 和 n2。

工会参考


推荐阅读