Получить последнюю запись в queryset
Как я могу получить последнюю запись в определенном наборе запросов?
8 ответов
вы можете просто сделать что-то вроде этого, используя reverse():
queryset.reverse()[0]
кроме того, остерегайтесь этого предупреждения из документации Django:
... обратите внимание, что
reverse()должны обычно вызывается только в QuerySet который имеет определенный порядок (например ,, при запросе модели, которая определяет порядок по умолчанию, или когда используяorder_by()). Если нет такого заказа определяется для заданногоQuerySet, зовуreverse()на нем нет реальных эффект (порядок не определен до вызоваreverse(), и после этого оставайтесь неопределенными).
latest(field_name=None)возвращает последний объект в таблице по дате, используя field_name, указанный в качестве поля даты.этот пример возвращает последнюю запись в таблице, согласно
в Django >= 1.6
добавлены методы QuerySet first() и last (), которые являются удобными методами, возвращающими первый или последний объект, соответствующий фильтрам. Возвращает None, если объекты не совпадают.
самый простой способ сделать это:
books.objects.all().last()
вы также используете это, чтобы получить первую запись так:
books.objects.all().first()
чтобы получить первый объект:
ModelName.objects.first()
получить последние объекты:
ModelName.objects.last()
вы можете использовать filter
ModelName.objects.filter(name='simple').first()
это работает для меня.
когда queryset уже исчерпан, вы можете сделать это, чтобы избежать другой подсказки db -
last = queryset[len(queryset) - 1] if queryset else None
не используйте try...except....
Джанго не бросает IndexError в этом случае.
Он бросает AssertionError или ProgrammingError(при запуске python с опцией-O)
Если вы используете django 1.6 и выше, теперь это намного проще, так как новый api был представлен -
Model.object.earliest()
Он даст latest () с обратным направлением.
p.s. - Я знаю свой старый вопрос, я публикую, как будто кто-то собирается приземлиться на этот вопрос, они узнают эту новую функцию и не используют старый метод.
самый простой способ, не беспокоясь о текущем заказе, - преобразовать QuerySet в список, чтобы вы могли использовать обычную отрицательную индексацию Python. Вот так:
list(User.objects.all())[-1]