простой путь к объединению QuerySet и вычитанию в django?

Рассмотрите два объекта QuerySet того же класса. Существует ли простой способ объединить их в единственный QuerySet путем вычисления объединения? Кроме того, есть ли простой способ вычесть их? Удаление всех элементов, которые появляются в обоих наборах от одного из наборов?

18
задан Jonathan 25 January 2012 в 15:28
поделиться

3 ответа

Я думаю, что для таких операций нужно их оценивать. Так что вы можете вызвать list() на них и работать с ними с помощью обычных операций со списками в python!

-1
ответ дан 30 November 2019 в 07:08
поделиться

Вы можете использовать объект Q .

Синтаксис может быть примерно таким:

added_query_set = YourModel.objects.\
         filter(Q(id__in=old_query_set_1)|Q(id__in=old_query_set_2))

Вы, вероятно, можете оптимизировать на основе ваших реальных потребностей и уменьшить количество обращений к базе данных (сейчас это 3), но это должно помочь вам начать.

3
ответ дан 30 November 2019 в 07:08
поделиться

Возвращаясь к документации django, вы можете:

new_query_set = query_set_1 | query_set_2

Это работает как логическое ИЛИ, которое фактически является сложением без дубликатов. Это отвечает аспекту сложения и, AFAIK, вообще не бьет по БД!

new_query_set = query_set_1 & query_set_2

Это работает как логическое И.

Все еще не понятно, как вычитать QuerySets. Мне трудно поверить, что сообщество до сих пор не решило эту проблему элегантно...

13
ответ дан 30 November 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: