正确的Django查询数据/对象的datetime,从n开始一小时

2024-04-25 08:42:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在过滤Django查询,以便从现在开始的最后一个小时获得updatetime,模型有一个DateTimeField。你知道吗

这是为了获得所有更新时间,更新一小时前,我已经尝试使用日期时间.now()-时间增量(小时=1)和使用范围(最小值、最大值)

我使用的视图(泛型.ListAPIView):

模型

updatetime = models.DateTimeField(blank=True, null=True)

onehours = datetime.now() - timedelta(hours=1) queryset = TbDevice.objects.filter(updatetime__gte=onehours).order_by('-updatetime')

这个代码应该返回上一个小时前的updatetime,例如在下午2点应该只返回上一个小时,但实际上所有具有相同日期的数据都出现了

我通过手动更改值updatetime进行检查,当最近的时间是14:57:00时,只有大于06:48:00的数据出现

两者都有影响吗? 不同类型 Update time in my DBin Postman

using timezoneUsing timezone form django.utils the result iswith my current time


Tags: 数据djangoin模型truetimemy时间
1条回答
网友
1楼 · 发布于 2024-04-25 08:42:34

明白!!你知道吗

你在Indonesia(GMT+7)。您的DB(使用系统时区)和django(使用UTC时区)有7小时的时差。你知道吗

请尝试使用时区感知日期时间格式进行查询。你知道吗

from django.utils import timezone
one_h_ago = timezone.now()-timezone.timedelta(hours=1)
queryset = TbDevice.object.filter(updatetime__gte=one_h_ago)

在postman中,您将得到"updatetime": "2019-05-28T22:33:00+7:00"响应中的T告诉我们您已经启用了时区支持。您已经设置了settings.USE_TZsettings.TIME_ZONE。你知道吗

希望这有帮助。如果你有任何问题,请告诉我。你知道吗

很乐意帮忙:)


这是为了你的知识:

根据评论,我认为您的模型是:

class TbDevice(models.Model):
    nickname = models.CharField(max_length=32, blank=True, null=True) 
    email = models.CharField(max_length=64, blank=True, null=True) 
    status = models.CharField(max_length=64, blank=True, null=True) 
    createtime = models.DateTimeField(blank=True, null=True) 
    updatetime = models.DateTimeField(blank=True, null=True) 

    class Meta: 
        managed = False 
        db_table = 'device' 

对于createtimeupdatetime,您应该使用

createtime = models.DateTimeField(auto_now_add=True)
updatetime = models.DateTimeField(auto_now=True)

有关详细信息,请查看auto_nowauto_now_add。你知道吗

相关问题 更多 >