Django查询超过5小时的对象的日期时间

use*_*513 56 django django-models django-queryset

我正在尝试为超过5个小时的小部件编写一个Django查询,我有点迷失.窗口小部件模型具有使用窗口小部件DateTimeField的创建时间填充的模型.

Dav*_*son 132

如果Widget是模型的名称,并且它具有名为的DateTimeField属性created,则查询将是:

from datetime import datetime, timedelta

time_threshold = datetime.now() - timedelta(hours=5)
results = Widget.objects.filter(created__lt=time_threshold)
Run Code Online (Sandbox Code Playgroud)

请注意,created__lt表示"已创建小于".

  • 如果 tz 支持处于活动状态,请使用 `from django.utils import timezone` 和 `timezone.now()` 而不是 `datetime.now()` (4认同)
  • 如果您的 DateTimeField 使用 `auto_now`,那么它的值将由数据库服务器设置。“datetime.now() - timedelta(hours=5)”将在数据库客户端上计算,这可能与数据库服务器的时间不对应。如何才能让记录的年龄完全在数据库服务器上计算出来呢? (2认同)

Jos*_*ton 15

now = datetime.datetime.now()
earlier = now - datetime.timedelta(hours=5)
MyModel.objects.filter(my_date_field__range=(earlier,now))
Run Code Online (Sandbox Code Playgroud)

这应该够了吧.

  • 超过5个小时,不少于5个小时! (4认同)
  • 范围的东西虽然有用. (3认同)

小智 12

如果 settings.USE_TZ = True 和 settings.TIME_ZONE 正在设置

from django.utils import timezone
five_h_ago = timezone.now()-timezone.timedelta(hours=5)
example.object.filter(datetimefield__lt=five_h_ago)
Run Code Online (Sandbox Code Playgroud)