Как я могу найти объединение двух наборов запросов Django? - PullRequest
72 голосов
/ 10 декабря 2010

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

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

Ответы [ 2 ]

154 голосов
/ 10 декабря 2010

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

records = query1 | query2

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

records = (query1 | query2).distinct()
38 голосов
/ 09 августа 2017

Начиная с версии 1.11 , наборы запросов django имеют встроенный метод объединения.

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

См. Мой пост в блоге об этом для получения дополнительных примеров.

...