记录创建和更新时间不存储在localtime django
问题描述:
我有一个模型“成员”,其中有两个字段“created_at”和“updated_at”。 原来,他们被定义如下:记录创建和更新时间不存储在localtime django
created_at = models.DateTimeField(auto_now_add=True, null=True)
updated_at = models.DateTimeField(auto_now_add=True, null=True)
我settings.py有USE_TZ =真和TIME_ZONE = “美国/纽约”。
我有一个自定义的中间件,用于激活用户选择的时区。
current_tz = pytz.timezone("<user defined timezone>")
timezone.activate(current_tz)
然后,我更新字段存储用户本地时间:
created_at = models.DateTimeField(default= lambda: timezone.localtime(timezone.now()), null=True)
updated_at = models.DateTimeField(default= lambda: timezone.localtime(timezone.now()), null=True)
现在,当我更新会员记录,并检查的updated_at时间,其显示相同的UTC时区,而不是用户的本地时间。
难道Django的总是存储在UTC在DB datetime值还是我失去了一些东西在这里
答
您所有的需求应注重USE_TZ = True
。
如果设置为USE_TZ = True
,DateTimeField存储UTC时间。 如果你在settings.py中评论USE_TZ = True
,你可以得到你想要的。
但是在项目中,如果打开USE_TZ,所有存储或内部处理甚至打印都是UTC时区,最好始终打开USE_TZ。当您在模板中显示时,对于time format conversion非常方便。
此代码将只使用服务器的本地时间,而不是用户。 –
我编辑了我的问题,提到了一个中间件,可根据用户选择的时区激活时区。那么,如何让它使用用户的localtime而不是服务器呢? – user2722127
够公平的。但这似乎仍然是一个糟糕的主意。为什么你要存储本地时间,而不是 - 如[文档](https://docs.djangoproject.com/en/1.11/topics/i18n/timezones/)中明确推荐的那样 - 存储UTC和输出转换? –