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

Метод hour

Метод hour применяется к QuerySet и позволяет фильтровать записи по часу времени в полях типа DateTimeField. Он используется в комбинации с двойным подчеркиванием для указания поля и оператора поиска. Метод возвращает новый QuerySet с отфильтрованными записями, где час соответствует заданному значению. Фильтрация происходит на уровне базы данных, что делает ее эффективной даже на больших наборах данных.

Синтаксис

Model.objects.filter(field_name__hour=value)

Пример . Использование с моделью

Рассмотрим модель Order с полем created_at типа DateTimeField и модель OrderItem для демонстрации работы фильтрации по часу:

from django.db import models class Order(models.Model): created_at = models.DateTimeField(auto_now_add=True) total_amount = models.DecimalField(max_digits=10, decimal_places=2) is_active = models.BooleanField(default=True) class OrderItem(models.Model): order = models.ForeignKey(Order, on_delete=models.CASCADE) product_name = models.CharField(max_length=100) quantity = models.IntegerField() price = models.DecimalField(max_digits=10, decimal_places=2)

Пример . Базовая фильтрация по часу

Давайте найдем все заказы, созданные в 10 часов утра:

from myapp.models import Order morning_orders = Order.objects.filter(created_at__hour=10) for order in morning_orders: print(f"Order {order.id} created at {order.created_at}")

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

"Order 1 created at 2026-09-05 10:15:30" "Order 3 created at 2026-09-04 10:45:12" "Order 7 created at 2026-09-03 10:02:45"

Пример . Комбинированная фильтрация

Метод hour можно комбинировать с другими операторами поиска для более точной фильтрации. Найдем заказы, созданные в 10 часов утра в 2025 году:

from myapp.models import Order from datetime import date filtered_orders = Order.objects.filter( created_at__year=2025, created_at__hour=10 ) for order in filtered_orders: print(f"Order: {order.id}, Date: {order.created_at}")

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

"Order: 15, Date: 2025-06-10 10:30:00" "Order: 23, Date: 2025-08-15 10:15:45" "Order: 31, Date: 2025-12-01 10:05:20"

Пример . С использованием метода exclude

Фильтрацию по часу можно использовать вместе с методом exclude для исключения записей. Найдем все заказы, которые были созданы не в 10 часов утра:

from myapp.models import Order not_morning_orders = Order.objects.exclude(created_at__hour=10) for order in not_morning_orders[:5]: print(f"Order {order.id} - Hour: {order.created_at.hour}")

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

"Order 2 - Hour: 14" "Order 4 - Hour: 9" "Order 5 - Hour: 16" "Order 6 - Hour: 11" "Order 8 - Hour: 22"

Пример . Фильтрация по часу через ManyToManyField

Метод hour можно применять через связанные модели. Найдем все позиции заказов, где заказ был создан в 10 часов утра:

from myapp.models import OrderItem morning_order_items = OrderItem.objects.filter( order__created_at__hour=10 ) for item in morning_order_items[:3]: print(f"Product: {item.product_name}, Quantity: {item.quantity}")

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

"Product: Laptop, Quantity: 2" "Product: Mouse, Quantity: 5" "Product: Keyboard, Quantity: 3"

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

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