【问题标题】:How to filter objects in Django by time since last 24 hours?自过去 24 小时以来,如何按时间过滤 Django 中的对象?
【发布时间】:2022-01-26 19:05:32
【问题描述】:

假设每天都有一个从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:00timezone.now() 的时间 - 所以类似于 Foo.objects.filter(date__range=[00:00, timezone.now()]) 谢谢。

【问题讨论】:

    标签: python django django-orm


    【解决方案1】:

    假设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)
    )
    

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多