Как я могу получить последнюю запись в определенном запросе?
Получить последнюю запись в наборе запросов
Ответ 1
Вы могли бы просто сделать что-то вроде этого, используя reverse()
:
queryset.reverse()[0]
Кроме того, остерегайтесь этого предупреждения из документации Django:
... обратите внимание, что
reverse()
должно обычно вызываются только на QuerySet который имеет определенное упорядочение (например, при запросе модели, которая определяет порядок по умолчанию или когда используяorder_by()
). Если таких заказов нет определяется для данногоQuerySet
, вызываяreverse()
, у него нет реального эффект (порядок undefinedдо вызоваreverse()
, и будет затем undefined).
Ответ 2
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]