Ответ 1
Это работает и выглядит немного чище:
records = query1 | query2
Если вы не хотите дублировать, вам нужно добавить .distinct()
:
records = (query1 | query2).distinct()
У меня есть модель Django с двумя настраиваемыми методами. Каждый возвращает другое подмножество объектов моделей, основанное на другом свойстве объекта.
Есть ли способ получить набор запросов или просто список объектов, то есть объединение запросов, возвращаемых каждым методом менеджера?
Это работает и выглядит немного чище:
records = query1 | query2
Если вы не хотите дублировать, вам нужно добавить .distinct()
:
records = (query1 | query2).distinct()
Начиная с версия 1.11, django querysets имеют встроенный объединенный метод.
q = q1.union(q2) #q will contain all unique records of q1 + q2
q = q1.union(q2, all=True) #q will contain all records of q1 + q2 including duplicates
q = q1.union(q2,q3) # more than 2 queryset union
Подробнее см. мой сообщение в блоге.