Django default = timezone.now()使用" old"来保存记录。时间

时间:2012-11-05 04:23:15

标签: python django django-timezone

这个问题现在已经发生了几个星期,现在和我的项目不同。

使用的两个模型都有一个时间戳字段,默认情况下设置为timezone.now()

这是引发错误标志的序列:


  • 模型一在下午7:30创建

  • 模型二是在晚上10点创建的,但是在    MySQL数据库存储为晚上7:30!

创建的每个模型     将时间戳保存在下午7:30,而不是实际时间,直到确定     持续时间通过然后设置新时间和以下所有模型     有新的时间...... Bizzare


可能有助于发现问题的一些额外细节:

我有一堆方法用于剥离tzinfo的时区,并用UTC替换它们。

这是因为我正在进行timezone.now() - creationTime计算以创建:“模型已在很久以前发布”功能 在项目中。但是,这确实不应该是问题的原因。

我认为使用datetime.datetime.now()也不会产生任何影响。

无论如何,谢谢你的帮助!

2 个答案:

答案 0 :(得分:48)

上周刚刚遇到default=date.today()的字段。如果删除括号(在这种情况下,尝试default=timezone.now),那么您将一个可调用的函数传递给模型,并且每次保存新实例时都会调用它。使用括号时,只有在models.py加载时才会调用它。

答案 1 :(得分:9)

只需像这样设置参数auto_now_add

timestamp = models.DateTimeField(auto_now_add=True)

更新

请不要使用auto_now_add。这不是推荐的方式,而是这样做:

from django.utils import timezone

timestamp = models.DateTimeField(default=timezone.now)