Найти - Пользователи
Полная версия: order_by вычисляемому полю
Начало » Django » order_by вычисляемому полю
1 2
Evg
Как замутить на ОРМ аналог такого запроса:

SELECT * FROM `table` order by (id>5)
?
Ferroman
Прочитать документацию, немного подумать…
.objects.filter(id>5).order_by('id')
Evg
Ferroman
.objects.filter(id>5).order_by('id')
а точно результат будет идентичен?)
В запросе же есть только сортировка никаких фильтров.
Ferroman
Нет не будет. А должен? Как по мне то такой запрос мне кажется весьма странным… Но, тем не менее.
Хотите абсолютно точно - пользуйтесь extra.
Evg
Ferroman
Как по мне то такой запрос мне кажется весьма странным…
ну может в таком контексте меннее странным покажется тогда) :
SELECT * FROM `text` order by (rating>0),date
про extra ниче не знаю - пойду читать коль посылают)
Ferroman
Все равно странный :)
Почему просто не сделать order_by('rating')?
Evg
Ferroman
Почему просто не сделать order_by('rating')?
Там такая задача на главной странице есть список объектов у которых есть рейтинг,
их нужно выводить по дате их создания (новые сверху) но при этом если у объекта отриц рейтинг то опускать его в самый низ, те первый критерий сортировки положительность рейтинга потом дата.

В реале пришлось сделать доп поле в моделе которое показывает знак рейтинга и по нему сортировть, тк не знал как вычисляемое сделать, но с другой стороны с вычисляемыми полями запросы медленные должны быть, так что может так даже лучше.
Ferroman
order_by('rating', ‘date’)
Тогда все нулевые будут и так внизу.
Evg
Ferroman
Тогда все нулевые будут и так внизу.
Но новые с + рейтингом не будут вверху)
Ferroman
Evg
А, нет, тогда не так Надо тогда сортировать по дате, а потом - по рейтингу. Тогда новые с высшим рейтингом будут вверху, в порядку убывания и даты, и рейтинга.
order_by('date', ‘rating’)
Проверьте.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB