Как фильтровать объекты в Django по времени, прошедшему за последние 24 часа?

Предполагая, что каждый день есть начальное время от 00:00 до 00:00, как лучше всего фильтровать объекты Django по времени, основываясь на текущем дне? Изначально я придумал следующее:

from django.utils import timezone


yesterday = timezone.now() - timezone.timedelta(1)
qs = Foo.objects.filter(date__gte=yesterday)

##

yesterday = datetime.date.today() - datetime.timedelta(1)
qs = Foo.objects.filter(date__gte=yesterday)

Однако, это не совсем правильно. Я бы предпочел, чтобы время начиналось точно от 00:00 до timezone.now() - то есть что-то вроде Foo.objects.filter(date__range=[00:00, timezone.now()]) Спасибо.

Предполагается, что поле date на самом деле является полем datetime.

Если вам нужны все записи с date, содержащие сегодняшнюю дату, вы можете использовать __date:

qs = Foo.objects.filter(date__date=timezone.now())

Если вам нужны, например, все записи за вчерашний день, но с временем не более timezone.now(), то так:

qs = Foo.objects.filter(
    date__date=timezone.now() - timezone.timedelta(1),
    date__lte=timezone.now() - timezone.timedelta(1)
)

Ответ Евгения Космака правильный, используйте datetime_field__date= фильтр.

Вот документация по Django

Также вы можете использовать шаблон date/datetime - timedelta() с другими аргументами в timedelta, например

timedelta(
    days=50,
    seconds=27,
    microseconds=10,
    milliseconds=29000,
    minutes=5,
    hours=8,
    weeks=2
)

документы находятся здесь

Вернуться на верх