Как фильтровать объекты в 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= фильтр.
Также вы можете использовать шаблон date/datetime - timedelta() с другими аргументами в timedelta, например
timedelta(
days=50,
seconds=27,
microseconds=10,
milliseconds=29000,
minutes=5,
hours=8,
weeks=2
)
документы находятся здесь