Как я могу получить последнюю запись в определенном наборе запросов?
django
django-queryset
Стивен
источник
источник
Django Doc :
источник
Самый простой способ сделать это:
books.objects.all().last()
Вы также можете использовать это, чтобы получить первую запись следующим образом:
books.objects.all().first()
источник
books.objects.last()
иbooks.objects.first()
должен сделать свое дело.XYZ.objects.first()
andXYZ.objects.last()
Django> = 1.6
Добавлены методы QuerySet first () и last (), которые являются вспомогательными методами, возвращающими первый или последний объект, соответствующий фильтрам. Возвращает None, если совпадающие объекты отсутствуют.
источник
Чтобы получить первый объект:
ModelName.objects.first()
Чтобы получить последние предметы:
ModelName.objects.last()
Вы можете использовать фильтр
ModelName.objects.filter(name='simple').first()
У меня это работает.
источник
Когда набор запросов уже исчерпан, вы можете сделать это, чтобы избежать еще одной подсказки db -
last = queryset[len(queryset) - 1] if queryset else None
Не используйте
try...except...
.Django
IndexError
в этом случае не бросает .Он выдает
AssertionError
илиProgrammingError
(при запуске python с параметром -O)источник
Если вы используете django 1.6 и выше, теперь это намного проще, поскольку был представлен новый api -
Model.object.earliest()
Он даст latest () с обратным направлением.
ps - Я знаю его старый вопрос, я публикую, как если бы кто-то столкнулся с этим вопросом, они узнали эту новую функцию и не использовали старый метод.
источник
Вы можете использовать
Model.objects.last()
илиModel.objects.first()
. Если неordering
определено, то набор запросов упорядочивается на основе первичного ключа. Если вам нужен набор запросов для упорядочивания поведения, вы можете обратиться к последним двум пунктам.Если вы думаете сделать это,
Model.objects.all().last()
получить последний иModel.objects.all().first()
получить первый элемент в наборе запросов или использоватьfilters
без раздумий. Тогда ознакомьтесь с некоторыми предостережениями ниже.Здесь важно отметить, что если вы не включили ничего
ordering
в свою модель, данные могут быть в любом порядке, и у вас будет случайный последний или первый элемент, чего не ожидалось.Например. Допустим, у вас есть модель
Model1
с 2 столбцамиid
иitem_count
10 строками с идентификаторами от 1 до 10. [Порядок не определен]Если вы получите Model.objects.all (). Last () таким образом, вы можете получить любой элемент из списка из 10 элементов. Да, это случайно, так как нет порядка по умолчанию.
Так что же можно сделать?
ordering
на основе любого поля или полей вашей модели. У него также есть проблемы с производительностью, пожалуйста, проверьте это тоже. Ссылка: Здесьorder_by
при загрузке. Как это:Model.objects.order_by('item_count').last()
источник
Самый простой способ, не беспокоясь о текущем порядке, - это преобразовать QuerySet в список, чтобы вы могли использовать обычную отрицательную индексацию Python. Вот так:
list(User.objects.all())[-1]
источник