Получить последнюю запись в наборе запросов



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

43   8  

8 ответов:

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

queryset.reverse()[0]

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

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

Django Doc:

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()

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

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()

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

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

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

list(User.objects.all())[-1]
    Ничего не найдено.

Добавить ответ:
Отменить.