Django метод различий в наборе запросов, теряющий порядок - PullRequest
1 голос
/ 07 марта 2019

Я пытаюсь использовать встроенный разностный метод Django в наборе запросов, но кажется, что после использования разностного упорядочения больше нет.

objects = self.get_index_children()
print("objects are %s ordered" % objects.ordered)

featured_recipes = objects.filter(featured=True)[:3]
print("featured_recipes are %s ordered" % featured_recipes.ordered)

latest_recipes = objects.difference(featured_recipes)
print("latest_recipes are %s ordered" % latest_recipes.ordered)  




objects are True ordered
featured_recipes are True ordered
latest_recipes are False ordered . <----

Это должно быть так или ошибка на стороне django?если да, есть ли какой-нибудь правильный способ найти разницу между двумя наборами запросов?

1 Ответ

1 голос
/ 07 марта 2019

difference() переводится в предложение EXCEPT, синтаксис которого зависит от серверной части базы данных.

Для SQLite Django выдает ошибку при использовании упорядоченных наборов запросов по обе стороны от difference().

Для Postgres упорядочение подзапросов разрешено, но оно влияет только на подзапросы (что имеет смысл, однако, только когда подзапрос разделен).

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

q3 = q1.difference(q2).order_by('name')

Что касается вашего последнего вопроса, вот документы для difference. Функция возвращает набор запросов, содержащий элементы в одном наборе запросов минус элементы в одном или нескольких других наборах запросов. Порядок здесь не имеет прямого отношения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...