РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
113 of 818 menu

Лукап year

Лукап year применяется к полям типа DateField и DateTimeField и позволяет отфильтровать записи по году. В качестве значения принимается целое число, обозначающее год. Лукап преобразуется в SQL-выражение EXTRACT(YEAR FROM field) = value и может использоваться в методах filter, exclude и других, поддерживающих поиск по полям.

Синтаксис

Model.objects.filter(field__year=value)

Пример

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

from django.db import models class Article(models.Model): title = models.CharField(max_length=200) published_at = models.DateTimeField() def __str__(self): return self.title

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

from myapp.models import Article articles_2023 = Article.objects.filter(published_at__year=2023) for article in articles_2023: print(article.title)

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

"Introduction to Python" "Web Development Basics" "Database Optimization"

Пример

Отфильтруем пользователей, зарегистрированных в 2022 году, и исключим записи из 2023 года:

from django.db import models class User(models.Model): username = models.CharField(max_length=100) registered_at = models.DateTimeField() def __str__(self): return self.username
from myapp.models import User users_2022 = User.objects.filter(registered_at__year=2022) users_not_2023 = User.objects.exclude(registered_at__year=2023) print(users_2022.count()) print(users_not_2023.count())

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

"15" "42"

Пример

Используем year в комбинации с другими операторами для более сложной фильтрации. Найдем заказы, созданные в 2024 году, у которых статус не завершен:

from django.db import models class Order(models.Model): created_at = models.DateTimeField() is_completed = models.BooleanField(default=False) def __str__(self): return f"Order {self.id}"
from myapp.models import Order orders = Order.objects.filter( created_at__year=2024, is_completed=False ) for order in orders: print(f"Order {order.id} - active")

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

"Order 1 - active" "Order 3 - active" "Order 5 - active"

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

  • лукап month,
    который фильтрует по месяцу из поля даты
  • лукап day,
    который фильтрует по дню из поля даты
  • лукап iso_year,
    который фильтрует по ISO-году из поля даты
  • лукап quarter,
    который фильтрует по кварталу из поля даты
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить