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

Метод datetimes

Метод datetimes применяется к QuerySet и возвращает новый QuerySet, содержащий объекты datetime.datetime, представляющие уникальные даты и времена из указанного поля, округленные до заданной точности. Метод принимает имя поля типа DateTimeField и аргумент kind, определяющий уровень точности: 'year', 'month', 'day', 'hour', 'minute' или 'second'. Результаты сортируются в порядке возрастания.

Параметр field_name указывает имя поля модели с типом DateTimeField, по которому производится выборка. Параметр kind задает уровень точности округления, а параметр order (необязательный) определяет порядок сортировки: 'ASC' (по возрастанию) или 'DESC' (по убыванию). По умолчанию используется 'ASC'. Также метод поддерживает параметр tzinfo для указания часового пояса.

Синтаксис

Model.objects.datetimes(field_name, kind, order='ASC', tzinfo=None)

Пример

Допустим, у нас есть модель Order с полем created_at типа DateTimeField. Извлечем уникальные даты создания заказов с точностью до дня:

from myapp.models import Order res = Order.objects.datetimes('created_at', 'day') for item in res: print(item)

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

"2026-01-01 00:00:00" "2026-01-02 00:00:00" "2026-01-03 00:00:00"

Пример

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

from myapp.models import Order from datetime import timedelta from django.utils import timezone now = timezone.now() week_ago = now - timedelta(days=7) orders = Order.objects.filter(created_at__gte=week_ago) res = orders.datetimes('created_at', 'hour', order='DESC') for item in res: print(item)

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

"2026-01-08 23:00:00" "2026-01-08 22:00:00" "2026-01-08 21:00:00"

Пример

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

from myapp.models import Order from django.db.models import Count months = Order.objects.datetimes('created_at', 'month') for month in months: count = Order.objects.filter(created_at__month=month.month).count() print(f"{month.strftime('%B %Y')}: {count}")

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

"January 2026: 15" "February 2026: 23" "March 2026: 18"

Пример

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

from myapp.models import Order from pytz import timezone tz = timezone('Europe/Moscow') res = Order.objects.datetimes('created_at', 'day', tzinfo=tz) for item in res: print(item)

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

"2026-01-01 00:00:00+03:00" "2026-01-02 00:00:00+03:00" "2026-01-03 00:00:00+03:00"

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

  • метод dates,
    который извлекает уникальные даты из DateField
  • метод filter,
    который фильтрует QuerySet по заданным условиям
  • метод aggregate,
    который выполняет агрегирование значений
  • метод annotate,
    который добавляет аннотации к каждому объекту в QuerySet
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить