Как я могу найти объединение двух наборов запросов Django?

У меня есть модель Django с двумя настраиваемыми методами. Каждый возвращает другое подмножество объектов моделей, основанное на другом свойстве объекта.

Есть ли способ получить набор запросов или просто список объектов, то есть объединение запросов, возвращаемых каждым методом менеджера?

Ответ 1

Это работает и выглядит немного чище:

records = query1 | query2

Если вы не хотите дублировать, вам нужно добавить .distinct():

records = (query1 | query2).distinct()

Ответ 2

Начиная с версия 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

Подробнее см. мой сообщение в блоге.