Класс Extract

Класс Extract применяется в запросах Django для извлечения конкретного компонента даты или времени из поля модели. Он используется внутри методов annotate или aggregate и позволяет получить год, месяц, день, час, минуту, секунду или неделю из значения поля. В качестве аргументов класс принимает название извлекаемой части и выражение, содержащее поле даты или времени.

Синтаксис

pythonfrom django.db.models import Extract

Extract(expression, lookup_name)

Пример

Давайте извлечем год из даты создания статьи:

pythonfrom myapp.models import Article
from django.db.models import Extract

res = Article.objects.annotate(
    year=Extract('created_at', 'year')
).values('title', 'year')
for item in res:
    print(item)

Результат выполнения кода:

python{'title': 'article 1', 'year': 2025}
{'title': 'article 2', 'year': 2026}

Пример

Давайте извлечем месяц из даты создания статьи:

pythonfrom myapp.models import Article
from django.db.models import Extract

res = Article.objects.annotate(
    month=Extract('created_at', 'month')
).values('title', 'month')
for item in res:
    print(item)

Результат выполнения кода:

python{'title': 'article 1', 'month': 1}
{'title': 'article 2', 'month': 2}

Пример

Давайте отфильтруем статьи, созданные в определенном году:

pythonfrom myapp.models import Article
from django.db.models import Extract

res = Article.objects.annotate(
    year=Extract('created_at', 'year')
).filter(year=2025).values('title', 'year')
for item in res:
    print(item)

Результат выполнения кода:

python{'title': 'article 1', 'year': 2025}

Пример

Давайте извлечем час из времени создания статьи:

pythonfrom myapp.models import Article
from django.db.models import Extract

res = Article.objects.annotate(
    hour=Extract('created_at', 'hour')
).values('title', 'hour')
for item in res:
    print(item)

Результат выполнения кода:

python{'title': 'article 1', 'hour': 14}
{'title': 'article 2', 'hour': 9}

Смотрите также

  • класс Trunc,
    который округляет дату до указанной точности
  • метод dates,
    который возвращает список уникальных дат
  • метод datetimes,
    который возвращает список уникальных дат и времен
  • функция year,
    которая фильтрует записи по году