在Django的ValuesQuerySet上联合

时间:2010-06-14 21:18:27

标签: python sql django

我一直在寻找一种在django中采用查询集联合的方法。从我读到的你可以使用query1 | query2采用联合...但是在使用values()时这似乎不起作用。我会跳过使用值直到获取联合之后但是我需要使用注释来获取字段的总和并对其进行过滤,因为没有办法“分组”我必须使用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

但是这不起作用,据我所知,我需要“值”部分,因为Sum没有其他方法可以知道如何操作,因为它是一个15列表。

1 个答案:

答案 0 :(得分:2)

QuerySet.values()不返回QuerySet,而是返回ValuesQuerySet,但不支持此操作。将它们转换为list,然后添加它们。

query = list(q1) + list(q2)