Получить последнюю запись в наборе запросов - PullRequest
70 голосов
/ 03 февраля 2010

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

Ответы [ 8 ]

111 голосов
/ 23 августа 2010

Джанго Док :

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

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

Entry.objects.latest('pub_date')
70 голосов
/ 03 февраля 2010

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

queryset.reverse()[0]

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

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

31 голосов
/ 21 января 2014

Джанго> = 1.6

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

29 голосов
/ 13 ноября 2015

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

books.objects.all().last()

Вы также используете это, чтобы получить первую запись, такую ​​как:

books.objects.all().first()
19 голосов
/ 25 ноября 2015

Для получения первого объекта:

ModelName.objects.first()

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

ModelName.objects.last()

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

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

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

5 голосов
/ 14 мая 2014

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

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

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

3 голосов
/ 12 января 2014

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

Model.object.earliest()

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

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

0 голосов
/ 07 февраля 2013

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

list(User.objects.all())[-1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...