Отключите сортировку запросов 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 не может помочь построить запрос эффективным образом. Поэтому обычно необработанные запросы следует использовать в крайнем случае.