Лукап iso_week_day
Лукап iso_week_day применяется к полям типа DateField или DateTimeField и позволяет отфильтровать записи по дню недели в формате ISO. Он принимает значения от 1 до 7, где 1 - понедельник, а 7 - воскресенье. Это особенно полезно, когда нужно получить данные за определенный день недели независимо от даты.
Синтаксис
Model.objects.filter(field__iso_week_day=value)
Пример
Давайте получим все статьи, которые были опубликованы в понедельник (день недели 1 по ISO):
from myapp.models import Article
monday_articles = Article.objects.filter(published_date__iso_week_day=1)
for article in monday_articles:
print(article.title)
Результат выполнения кода:
"Monday Morning News"
"Start of Week Review"
"Weekly Planning Tips"
Пример
Давайте найдем все записи в блоге, созданные в выходные дни (суббота и воскресенье - дни 6 и 7 по ISO):
from myapp.models import Post
weekend_posts = Post.objects.filter(
created_at__iso_week_day__in=[6, 7]
)
for post in weekend_posts:
print(f"{post.title} - {post.created_at}")
Результат выполнения кода:
"Weekend Update - 2025-01-11 14:30:00"
"Sunday Reflections - 2025-01-12 09:15:00"
"Saturday Special - 2025-01-18 10:00:00"
Пример
Давайте отфильтруем пользователей, которые зарегистрировались в среду (день недели 3 по ISO):
from myapp.models import User
wednesday_users = User.objects.filter(
registration_date__iso_week_day=3
).values('username', 'registration_date')
for user in wednesday_users:
print(user)
Результат выполнения кода:
{'username': 'alice', 'registration_date': datetime.date(2025, 1, 15)}
{'username': 'bob', 'registration_date': datetime.date(2025, 1, 22)}
{'username': 'charlie', 'registration_date': datetime.date(2025, 1, 29)}
Пример
Давайте подсчитаем количество заказов, сделанных в пятницу (день недели 5 по ISO):
from myapp.models import Order
friday_orders_count = Order.objects.filter(
order_date__iso_week_day=5
).count()
print(friday_orders_count)
Результат выполнения кода:
"42"
Пример
Давайте получим задачи, назначенные на вторник или четверг (дни 2 и 4 по ISO):
from myapp.models import Task
from datetime import date
midweek_tasks = Task.objects.filter(
due_date__iso_week_day__in=[2, 4],
due_date__gte=date(2025, 1, 1)
)
for task in midweek_tasks:
print(f"{task.name} - {task.due_date}")
Результат выполнения кода:
"Complete report - 2025-01-07"
"Team meeting - 2025-01-09"
"Review progress - 2025-01-14"