Django中ValuesQuerySet的并集
我一直在找一种方法,想在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)