Метод dates
Метод dates применяется к QuerySet и возвращает новый QuerySet, содержащий объекты типа datetime.date, представляющие уникальные даты из указанного поля. Это полезно для создания календарей, архивов или группировки записей по датам. Метод принимает имя поля, параметр точности (год, месяц или день) и необязательный порядок сортировки.
Синтаксис
Model.objects.dates(field_name, kind, order='ASC')
Параметр field_name указывает имя поля модели (должно быть типа DateField или DateTimeField). Параметр kind определяет точность выборки и может принимать значения: 'year', 'month' или 'day'. Параметр order задает порядок сортировки: 'ASC' (по умолчанию) или 'DESC'.
Пример
Давайте получим все уникальные годы из поля 'created_at' модели Article:
from myapp.models import Article
years = Article.objects.dates('created_at', 'year')
for year in years:
print(year)
Результат выполнения кода:
"2025-01-01"
"2026-01-01"
Пример
Получим уникальные месяцы из поля 'created_at' с сортировкой по убыванию:
from myapp.models import Article
months = Article.objects.dates('created_at', 'month', order='DESC')
for month in months:
print(month)
Результат выполнения кода:
"2026-09-01"
"2026-08-01"
"2026-07-01"
Пример
Получим уникальные дни из поля 'published_at' для записей со статусом 'published':
from myapp.models import Article
days = (Article.objects
.filter(status='published')
.dates('published_at', 'day')
)
for day in days:
print(day)
Результат выполнения кода:
"2026-09-01"
"2026-09-02"
"2026-09-05"