【发布时间】:2018-02-20 19:32:39
【问题描述】:
我有一个模型“成员”,其中有两个字段“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 格式将日期时间值存储在 DB 中还是我在这里遗漏了什么
【问题讨论】:
-
这段代码只会使用服务器的本地时间,而不是用户。
-
我已经编辑了我的问题,以提及根据用户选择的时区激活时区的中间件。那么,如何让它使用用户的本地时间而不是服务器呢?
-
很公平。但这似乎仍然是个坏主意。为什么要存储本地时间,而不是像明确推荐的 in the docs 那样存储 UTC 并转换输出?
-
因此,无需更新 created_at 和 updated_at 字段,只需在访问它们时将其值转换为本地时间。