Союз на ValuesQuerySet в Джанго - PullRequest
0 голосов
/ 15 июня 2010

Я искал способ объединить наборы запросов в 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

Но это не работает, и, насколько я знаю, мне нужна часть "значения", потому что у Сум нет другого способа узнать, как действовать, поскольку это таблица из 15 столбцов.

1 Ответ

2 голосов
/ 15 июня 2010

QuerySet.values() не возвращает QuerySet, а скорее ValuesQuerySet, который не поддерживает эту операцию.Преобразуйте их в list с, затем добавьте.

query = list(q1) + list(q2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...