Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 21, 2009 01:36:46

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Выборка в обратном порядке

tezro
post_list = Post.objects.all() - в дефолтном порядке
post_list = Post.objects.all().reverse() - в обратном.

Вроде это и есть задача.
Нет. Сортировка должна быть задана явно – либо в order_by вызове, либо в Meta у модели. В иных случаях reverse ничего не делает. Другими словами, reverse работает на уровне самой Джанги, переворачивая условия сортировки, но не опускается до БД.



Офлайн

#2 Дек. 21, 2009 02:19:08

tezro
От:
Зарегистрирован: 2009-12-09
Сообщения: 90
Репутация: +  0  -
Профиль   Отправить e-mail  

Выборка в обратном порядке

Daevaorn
tezro
post_list = Post.objects.all() - в дефолтном порядке
post_list = Post.objects.all().reverse() - в обратном.

Вроде это и есть задача.
Нет. Сортировка должна быть задана явно – либо в order_by вызове, либо в Meta у модели. В иных случаях reverse ничего не делает. Другими словами, reverse работает на уровне самой Джанги, переворачивая условия сортировки, но не опускается до БД.
По-моему, мы спорим об одном и том же :)

Если выборка сделана, то перевернуть её можно реверсом, либо предварительно по “отрицательному” полю. Но, реверс просто перевернёт всё, а “-pk” отсортирует. Эт я к тому, что в задаче не стоит условия сортировать - просто перевернуть… Но я думаю Mutagena всё понял.

Хм, в любом случае идёт обращение к базе…
http://code.djangoproject.com/browser/django/trunk/django/db/models/sql/query.py#L488

Почему не list.reverse() просто… А. Ну лишняя операция же.



Отредактировано (Дек. 21, 2009 02:27:50)

Офлайн

#3 Дек. 21, 2009 10:18:31

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Выборка в обратном порядке

tezro

docs.djangoproject.com
Also, note that reverse() should generally only be called on a QuerySet which has a defined ordering (e.g., when querying against a model which defines a default ordering, or when using order_by()). If no such ordering is defined for a given QuerySet, calling reverse() on it has no real effect (the ordering was undefined prior to calling reverse(), and will remain undefined afterward).
Если нужен обратный порядок, то прямой порядок должен тоже быть явно задан, иначе смысла делать reverse нет … логически.

P.S. “Explicit is better than implicit.”



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version