我有一个模型“Member”,其中有两个字段“created_at”和“updated_at”。 最初,它们的定义如下:
created_at = models.DateTimeField(auto_now_add=True, null=True)
updated_at = models.DateTimeField(auto_now_add=True, null=True)
我的settings.py有 USE_TZ = True 和TIME_ZONE =“America / New_York”。
我定义了一个自定义中间件来激活用户选择的时区。
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中的数据库中,或者我在这里遗漏了什么
答案 0 :(得分:1)
您的所有要求都应关注USE_TZ = True
。
如果设置USE_TZ = True
,则DateTimeField会存储UTC时间。
如果您在settings.py中对USE_TZ = True
发表评论,则可以获得所需内容。
但是在项目中,你最好总是打开USE_TZ,如果打开USE_TZ,所有商店或内部处理甚至打印,都是UTC时区。当您在模板中显示时,time format conversion非常方便。