在我维护的带有postgresql后端的Django应用程序中,用户登录并发表评论。每条评论都有一个与之相关的时间戳。
创建评论对象时,我会这样做:
now = datetime.now()
Comment.objects.create(commenter=self.request.user, when=now, text='text')
now
是时区感知的 - 即我是UTC +530,now
正确编码该信息。如果我使用psql
并查看在post postgresql表中创建的条目,我会看到datetime对象的正确值。
但是,如果我从Django应用程序访问此同一对象,并print
输出其日期时间戳,我会看到一个时区不知道对象。即一个日期时间对象,不知道我是UTC +530。
这完全搞砸了我的逻辑。我如何确保在Django应用程序中获取相同的dateg对象,该对象保存在相关的postgresql表中?值得注意的是,两个输出是不同的,我可能做了一些根本错误的事情。救命啊!
答案 0 :(得分:1)
使用timezone.now()代替datetime.now():
from django.utils import timezone
timezone.now()
为整个应用程序(包括PostgreSQL架构更新)全局或不带时区获取now()。有或没有时区取决于USE_TZ设置。