Django中ValuesQuerySet的并集

0 投票
1 回答
2359 浏览
提问于 2025-04-15 23:58

我一直在找一种方法,想在Django中合并查询集。根据我看到的,使用query1 | query2可以合并查询集……不过在使用values()的时候,这似乎不太管用。我本来想在合并之后再用values,但我需要用annotate来计算某个字段的总和并进行过滤,而由于没有“分组”的方法,我必须使用values()。我看到的其他建议是使用Q对象,但我想不出一个可行的方法。

我是不是只能直接用SQL,还是说Django有其他的解决办法呢?

我想要的是:

q1 = mymodel.objects.filter(date__lt = '2010-06-11').values('field1','field2').annotate(volsum=Sum('volume')).exclude(volsum=0)
q2 = mymodel.objects.values('field1','field2').annotate(volsum=Sum('volume')).exclude(volsum=0)
query = q1|q2

但这行不通,据我所知,我需要“values”部分,因为在一个有15列的表中,Sum不知道该怎么处理。

1 个回答

2

QuerySet.values() 并不是返回一个普通的 QuerySet,而是返回一个叫 ValuesQuerySet 的东西,这个东西不支持你想要的操作。你需要先把它们转换成 list,然后再进行加法运算。

query = list(q1) + list(q2)

撰写回答