Рассмотрите два объекта QuerySet того же класса. Существует ли простой способ объединить их в единственный QuerySet путем вычисления объединения? Кроме того, есть ли простой способ вычесть их? Удаление всех элементов, которые появляются в обоих наборах от одного из наборов?
Я думаю, что для таких операций нужно их оценивать. Так что вы можете вызвать list()
на них и работать с ними с помощью обычных операций со списками в python!
Вы можете использовать объект Q
.
Синтаксис может быть примерно таким:
added_query_set = YourModel.objects.\
filter(Q(id__in=old_query_set_1)|Q(id__in=old_query_set_2))
Вы, вероятно, можете оптимизировать на основе ваших реальных потребностей и уменьшить количество обращений к базе данных (сейчас это 3), но это должно помочь вам начать.
Возвращаясь к документации django, вы можете:
new_query_set = query_set_1 | query_set_2
Это работает как логическое ИЛИ, которое фактически является сложением без дубликатов. Это отвечает аспекту сложения и, AFAIK, вообще не бьет по БД!
new_query_set = query_set_1 & query_set_2
Это работает как логическое И.
Все еще не понятно, как вычитать QuerySets. Мне трудно поверить, что сообщество до сих пор не решило эту проблему элегантно...