Подтвердить что ты не робот

Получить последнюю запись в наборе запросов

Как я могу получить последнюю запись в определенном запросе?

4b9b3361

Ответ 1

Вы могли бы просто сделать что-то вроде этого, используя reverse():

queryset.reverse()[0]

Кроме того, остерегайтесь этого предупреждения из документации Django:

... обратите внимание, что reverse() должно обычно вызываются только на QuerySet который имеет определенное упорядочение (например, при запросе модели, которая определяет порядок по умолчанию или когда используя order_by()). Если таких заказов нет определяется для данного QuerySet, вызывая reverse(), у него нет реального эффект (порядок undefinedдо вызова reverse(), и будет затем undefined).

Ответ 2

Django Doc:

latest(field_name=None) возвращает последний объект в таблице по дате, используя поле_имя, предоставленное как поле даты.

В этом примере возвращается последняя запись в таблице, в соответствии с pub_date:

Entry.objects.latest('pub_date')

Ответ 3

Django >= 1.6

Добавлены методы QuerySet first() и last(), которые являются удобными методами, возвращающими первый или последний объект, соответствующий фильтрам. Возвращает Нет, если нет соответствующих объектов.

Ответ 4

Самый простой способ сделать это:

books.objects.all().last()

Вы также можете использовать это для первой записи:

books.objects.all().first()

Ответ 5

Чтобы получить первый объект:

ModelName.objects.first()

Чтобы получить последние объекты:

ModelName.objects.last()

Вы можете использовать фильтр

ModelName.objects.filter(name='simple').first()

Это работает для меня.

Ответ 6

Если использовать django 1.6 и выше, гораздо проще теперь, когда был введен новый api -

Model.object.earliest()

Он будет давать последние() с обратным направлением.

p.s. - Я знаю его старый вопрос, я отправляю, как будто идущий вперед, кто-то приземляется на этот вопрос, они узнают эту новую функцию и не в конечном итоге используют старый метод.

Ответ 7

Когда набор запросов уже исчерпан, вы можете сделать это, чтобы избежать другой подсказки db -

last = queryset[len(queryset) - 1] if queryset else None

Не используйте try...except....
Django не бросает IndexError в этом случае.
Он выдает AssertionError или ProgrammingError (при запуске python с опцией -O)

Ответ 8

Самый простой способ, не беспокоясь о текущем заказе, состоит в том, чтобы преобразовать QuerySet в список, чтобы вы могли использовать стандартную отрицательную индексацию Python. Например:

list(User.objects.all())[-1]