Метод latest
Метод latest применяется к QuerySet и возвращает объект модели,
который является последним по указанному полю сортировки. Поле должно
быть датой, временем или числовым полем. Метод полезен для получения
самой свежей записи, например, последней опубликованной статьи или
последнего зарегистрированного пользователя. Если в QuerySet нет записей,
метод выбрасывает исключение DoesNotExist.
Синтаксис
Model.objects.latest(*fields)
В качестве аргумента передается строка с именем поля, по которому будет выполняться сортировка в порядке убывания. Поле должно быть индексированным для оптимальной производительности.
Пример
Давайте получим последнюю опубликованную статью по дате создания:
from myapp.models import Article
latest_article = Article.objects.latest('created_at')
print(latest_article.title)
Результат выполнения кода:
"Последняя статья"
Пример
Метод latest можно комбинировать с фильтрацией для получения
последней записи, соответствующей определенным условиям:
from myapp.models import Article
latest_published = Article.objects.filter(
status='published'
).latest('created_at')
print(latest_published.title)
Результат выполнения кода:
"Опубликованная статья"
Пример
Для работы с несколькими полями можно использовать метод latest
с указанием нескольких полей, где сортировка выполняется по первому,
а в случае равенства значений - по второму:
from myapp.models import Article
latest_by_both = Article.objects.latest('created_at', 'id')
print(f"Latest: {latest_by_both.title} (id: {latest_by_both.id})")
Результат выполнения кода:
"Latest: Статья 5 (id: 5)"
Пример
Важно обрабатывать ситуацию, когда записей в QuerySet нет,
чтобы избежать исключения:
from myapp.models import Article
from django.core.exceptions import ObjectDoesNotExist
try:
latest = Article.objects.latest('created_at')
print(f"Latest article: {latest.title}")
except ObjectDoesNotExist:
print("No articles found")
Результат выполнения кода:
"No articles found"