Лукап iso_week_day

Лукап iso_week_day применяется к полям типа DateField или DateTimeField и позволяет отфильтровать записи по дню недели в формате ISO. Он принимает значения от 1 до 7, где 1 - понедельник, а 7 - воскресенье. Это особенно полезно, когда нужно получить данные за определенный день недели независимо от даты.

Синтаксис

pythonModel.objects.filter(field__iso_week_day=value)

Пример

Давайте получим все статьи, которые были опубликованы в понедельник (день недели 1 по ISO):

pythonfrom myapp.models import Article

monday_articles = Article.objects.filter(published_date__iso_week_day=1)
for article in monday_articles:
  print(article.title)

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

python"Monday Morning News"
"Start of Week Review"
"Weekly Planning Tips"

Пример

Давайте найдем все записи в блоге, созданные в выходные дни (суббота и воскресенье - дни 6 и 7 по ISO):

pythonfrom 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}")

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

python"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):

pythonfrom 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)

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

python{'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):

pythonfrom myapp.models import Order

friday_orders_count = Order.objects.filter(
  order_date__iso_week_day=5
).count()
print(friday_orders_count)

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

python"42"

Пример

Давайте получим задачи, назначенные на вторник или четверг (дни 2 и 4 по ISO):

pythonfrom 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}")

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

python"Complete report - 2025-01-07"
"Team meeting - 2025-01-09"
"Review progress - 2025-01-14"

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

  • лукап year,
    который фильтрует записи по году
  • лукап month,
    который фильтрует записи по месяцу
  • лукап day,
    который фильтрует записи по дню месяца
  • лукап week_day,
    который фильтрует записи по дню недели (1-7, где 1 - воскресенье)