В django, как я сортирую модель на поле и затем получаю последний объект?

21
задан Harley Holcombe 7 November 2008 в 06:56
поделиться

4 ответа

obj = Edition.objects.latest('pub_date')

можно также упростить вещи путем помещения get_latest_by в Meta модели, тогда Вы будете в состоянии сделать

obj = Edition.objects.latest()

, См. документы для большего количества информации. Вы, вероятно, также захотите установить ordering опция Meta.

33
ответ дан Harley Holcombe 29 November 2019 в 06:38
поделиться

Ответ Harley является способом пойти для случая, где Вы хотите последнее согласно некоторым критериям упорядочивания конкретных Моделей, как Вы делаете, но общее решение состоит в том, чтобы инвертировать упорядочивание и получить первый объект:

Edition.objects.order_by('-pub_date')[0]
21
ответ дан Jonny Buchanan 29 November 2019 в 06:38
поделиться

Примечание:

Нормальные списки Python принимают отрицательные индексы, которые показывают смещение от конца списка, а не начало как положительное число. Однако объекты QuerySet повысят

AssertionError: Negative indexing is not supported.
при использовании отрицательного индекса который является, почему необходимо сделать что сказанный insin: инвертируйте упорядочивание и захватите 0th элемент.
4
ответ дан Dan 29 November 2019 в 06:38
поделиться

Остерегайтесь использования

Edition.objects.order_by('-pub_date')[0]

, поскольку Вы могли бы индексировать пустой QuerySet. Я не уверен, каков корректный подход Pythonic, но самое простое должно было бы обернуть его в если/еще или попытка/выгода:

try:
    last = Edition.objects.order_by('-pub_date')[0]
except IndexError:
    # Didn't find anything...

, Но, поскольку @Harley сказал, когда Вы заказываете по дате, latest() способ djangonic сделать это.

2
ответ дан Yogi 29 November 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: