Как получить последнюю запись в определенном запросе?Получить последнюю запись в запросе
ответ
Вы могли бы просто сделать что-то вроде этого, используя reverse()
:
queryset.reverse()[0]
Кроме того, остерегайтесь это предупреждение из документации Django:
... обратите внимание, что
reverse()
следует вообще можно назвать только на QuerySet , который имеет определенное упорядочение (например, при запросе модели, которую определяет порядок по умолчанию или когда с использованиемorder_by()
). Если такого заказа не определен для данногоQuerySet
, вызоваreverse()
на него не имеет никакого реального эффекта (упорядочение было определено до вызоваreverse()
, и остаются неопределенными после).
latest(field_name=None)
возвращает последний объект в таблице, по дате, используя field_name представленного в поле даты.Этот пример возвращает последнюю запись в таблице, в соответствии с полем
pub_date
:Entry.objects.latest('pub_date')
Это тоже работает. 'Entry.objects.latest ('id')' – Renyi
Это опрятный способ сделать это. Также: «Если Meta вашей модели задает get_latest_by, вы можете оставить аргумент field_name последним()» в соответствии с документами. –
Самый простой путь, не беспокоясь о текущем упорядоченности, чтобы преобразовать QuerySet к чтобы вы могли использовать обычную отрицательную индексацию Python. Как так:
list(User.objects.all())[-1]
Это запросит ВСЕ объекты из БД, а затем возьмет первый – warvariuc
Хорошая точка! Очевидно, не думал об этом. Ответ .reverse() (выбранный сейчас) - это правильный путь! –
При использовании Джанго 1.6 и выше, его намного проще, как новый апи были введены -
Model.object.earliest()
Это даст последний() с обратным направлением.
p.s. - Я знаю его старый вопрос, я отправляю, как будто идущий вперед, кто-то приземляется на этот вопрос, они узнают эту новую функцию, а не используют старый метод.
из docs: earlyli() и last() требуют либо параметра field_name, либо get_latest_by в модели – panchicore
Django> = 1.6
методы Добавлена QuerySet первый() и последняя(), которые являются удобные методы возвращающие первый или последний объект, соответствующий фильтры. Возвращает Нет, если нет соответствующих объектов.
Когда QuerySet уже исчерпан, вы можете сделать это, чтобы избежать еще дб подсказку -
last = queryset[len(queryset) - 1] if queryset else None
Не используйте try...except...
.
Django не бросает IndexError
в этом случае.
Он бросает AssertionError
или ProgrammingError
(при запуске питона с опцией -O)
Чтобы получить первый объект:
ModelName.objects.first()
Чтобы получить последние объекты:
ModelName.objects.last()
Вы можете использовать фильтр
ModelName.objects.filter(name='simple').first()
Это работает для меня.
- 1. получить последнюю запись таблицы в запросе выборки
- 2. выбрать последнюю запись в запросе соединения
- 3. найти последнюю запись в SQL-запросе
- 4. Получить последнюю запись для каждой категории в одном запросе | Yii2
- 5. Как получить последнюю вставленную запись в запросе msaccess
- 6. CKQueryOperation получить последнюю запись
- 7. получить последнюю запись таблицы
- 8. Получить последнюю запись
- 9. Получить последнюю запись ldap
- 10. Как получить последнюю запись
- 11. Как получить последнюю запись
- 12. Tastypie получить последнюю запись
- 13. Получить последнюю запись mysql
- 14. Получить последнюю запись в MySQL
- 15. Получить последнюю запись в MySQL
- 16. Получить последнюю запись в Кассандре
- 17. получить последнюю запись в файле
- 18. получить последнюю запись в группе
- 19. Получить последнюю запись по дате
- 20. Получить последнюю созданную запись в базе данных
- 21. Получить последнюю запись для каждого
- 22. Получить последнюю запись каждого донора
- 23. Получить последнюю запись из объединения
- 24. Как получить первую/последнюю запись
- 25. Получить последнюю запись из запроса
- 26. Получить последнюю запись группы SQL
- 27. SQL: эффективно получить последнюю запись
- 28. Получить последнюю запись о группе
- 29. инструкция mySQL получить последнюю запись
- 30. Получить последнюю запись набора результатов
thnx ... не знал этого – Stephen
, как сказано в django docs,: «обратите внимание, что reverse() обычно должен вызываться только на QuerySet, который имеет определенное упорядочение (например, при запросе модели, которая определяет по умолчанию или при использовании order_by()) .Если такого заказа не задано для данного QuerySet, вызов reverse() на нем не имеет реального эффекта (упорядочение не было определено до вызова reverse() и после этого будет оставаться неопределенным) «. – jujule
Я отредактировал это предупреждение для вашего ответа, надеюсь, что все в порядке. –