Я искал способ объединения запросов в django. Из того, что я читал, вы можете использовать query1 | query2, чтобы принять объединение ... Это, похоже, не работает при использовании значений(). Я бы пропустил использование значений до тех пор, пока не получив объединение, но мне нужно использовать аннотацию, чтобы взять сумму поля и фильтровать его, а так как нет возможности делать «group by», мне нужно использовать значения(). Другие предложения, которые я прочитал, должны были использовать объекты Q, но я не могу думать о том, как это работает.Union on ValuesQuerySet in django
Нужно ли мне просто использовать прямой 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 столбцов.
Это немного отличается от объединения ... Если на q1 и q2 имеется перекрытие, я бы получил дубликаты записей в запросе. Я попробовал set (q1) | set (q2), но словари изначально хешируются. – Wuxab
Существует довольно много методов для получения правильного объединения двух списков в Python здесь, даже с нераскрывающимися типами. Или в худшем случае вы можете использовать преобразование Шварца и поместить их все в диктовку. http://en.wikipedia.org/wiki/Schwartzian_transform –