Класс Extract
Класс Extract применяется в запросах Django для извлечения конкретного компонента даты или времени из поля модели. Он используется внутри методов annotate или aggregate и позволяет получить год, месяц, день, час, минуту, секунду или неделю из значения поля. В качестве аргументов класс принимает название извлекаемой части и выражение, содержащее поле даты или времени.
Синтаксис
from django.db.models import Extract
Extract(expression, lookup_name)
Пример
Давайте извлечем год из даты создания статьи:
from 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)
Результат выполнения кода:
{'title': 'article 1', 'year': 2025}
{'title': 'article 2', 'year': 2026}
Пример
Давайте извлечем месяц из даты создания статьи:
from 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)
Результат выполнения кода:
{'title': 'article 1', 'month': 1}
{'title': 'article 2', 'month': 2}
Пример
Давайте отфильтруем статьи, созданные в определенном году:
from 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)
Результат выполнения кода:
{'title': 'article 1', 'year': 2025}
Пример
Давайте извлечем час из времени создания статьи:
from 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)
Результат выполнения кода:
{'title': 'article 1', 'hour': 14}
{'title': 'article 2', 'hour': 9}