如何按过去 24 小时后的时间过滤 Django 中的对象?

How to filter objects in Django by time since last 24 hours?

假设每天有一个从 00:0000: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)
)

Yevgeniy Kosmak 的回答是正确的,使用 datetime_field__date= 过滤器。

这里是the Django docs

您也可以在 timedelta 中使用 date/datetime - timedelta() 模式和其他参数,例如

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

文档是 here