开发者

Union on ValuesQuerySet in django

开发者 https://www.devze.com 2023-01-03 16:18 出处:网络
I\'ve been searching for a way to take the union of querysets in django. From what I read you can use query1 | query2 to take the union... This doesn\'t seem to work when using values() though. I\'d s

I've been searching for a way to take the union of querysets in django. From what I read you can use query1 | query2 to take the union... This doesn't seem to work when using values() though. I'd skip using values until after taking the union but I need to use annotate to take the sum of a field and filter on it and since there's no way to do "group by" I have to use values(). The other suggestions I read were to use Q objects but I can't think of a way that would work.

Do I pretty much need to just use straight SQL or is there a django way of doing this?

What I want is:

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

But this doesn't work and as far as I know I need the "values" part because there's no other way for Sum to know how to act since it's a 15开发者_开发知识库 column table.


QuerySet.values() does not return a QuerySet, but rather a ValuesQuerySet, which does not support this operation. Convert them to lists then add them.

query = list(q1) + list(q2)
0

精彩评论

暂无评论...
验证码 换一张
取 消