Лукап iso_year

Лукап iso_year применяется к полям типа DateField и DateTimeField в запросах фильтрации. Он позволяет отбирать записи по ISO году, который может отличаться от календарного года. Лукап используется в паре с именем поля через двойное подчеркивание.

Параметры: значение должно быть целым числом, представляющим ISO год. Лукап работает со всеми операторами сравнения, такими как exact, gt, gte, lt, lte.

Синтаксис

pythonModel.objects.filter(field_name__iso_year=year_value)

Пример

Допустим, у нас есть модель статьи с полем даты публикации:

pythonfrom django.db import models

class Article(models.Model):
  title = models.CharField(max_length=200)
  published_at = models.DateTimeField()

  def __str__(self):
    return self.title

Отфильтруем статьи, опубликованные в ISO году 2024:

pythonfrom myapp.models import Article

res = Article.objects.filter(published_at__iso_year=2024)
for article in res:
  print(article.title)

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

python"First article"
"Second article"
"Third article"

Пример

Используем сравнение для выборки статей за ISO годы начиная с 2025:

pythonfrom myapp.models import Article

res = Article.objects.filter(published_at__iso_year__gte=2025)
print(res.values_list('title', flat=True))

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

python["Article from 2025", "Article from 2026"]

Пример

Используем диапазон ISO годов для выборки записей:

pythonfrom myapp.models import Article

res = Article.objects.filter(
  published_at__iso_year__range=(2023, 2025)
)
print(res.count())

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

python"12"

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

  • лукап year,
    который фильтрует по календарному году
  • лукап iso_week_day,
    который фильтрует по дню недели в ISO стандарте
  • лукап week,
    который фильтрует по номеру недели
  • лукап week_day,
    который фильтрует по дню недели