Отключите сортировку запросов Django по умолчанию

Похоже, что Django по умолчанию упорядочивает результат на основе первичного ключа. В моем приложении мне нужен обратный порядок, т.е. самые последние записи всегда должны быть первыми. Я просмотрел этот вопрос с ответами, которые предлагают использовать order_by() или query.order_by(). Проблема в том, что по некоторым причинам я должен использовать raw SQL запрос и они дают:

'RawQuery' object has no attribute 'order_by'

или:

'RawQuery' object has no attribute 'clear_ordering'

Любая помощь будет принята с благодарностью.

Проблема, которая у меня возникла, заключается в том, что по некоторым причинам я должен использовать raw SQL запрос.

Если вы используете необработанный запрос, то вы больше не можете использовать ORM-методы Django. Необработанный запрос означает, что вы задаете запрос, а Django не понимает, как работает запрос, поэтому он не может изменить упорядочивание.

Таким образом, вы должны сделать упорядочивание в самом необработанном запросе. Что-то вроде:

MyModel.objects.raw(
    'SELECT app_name_table.id FROM app_name_table ORDER BY id DESC'
)

Но очень редко бывает так, что Django ORM не может помочь построить запрос эффективным образом. Поэтому обычно необработанные запросы следует использовать в крайнем случае.

Вернуться на верх