28

这个问题已经断断续续地发生了几个星期,这与我的项目中提出的任何问题都不同。

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

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


  • 模型 1 在晚上 7:30 创建

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

创建的每个模型都在晚上 7:30 下保存其时间戳,而不是实际时间,直到经过一定的持续时间。然后设置了一个新时间,以下所有模型都有这个新时间...... Bizzare


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

我有很多方法可以用来剥离我的时区,tzinfo并用 UTC 替换它们。

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

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

无论如何,感谢您的帮助!

4

2 回答 2

66

上周刚刚遇到了这个领域default=date.today()。如果您删除括号(在这种情况下为 try default=timezone.now),那么您将一个可调用对象传递给模型,并且每次保存新实例时都会调用它。使用括号,它只在models.py加载时被调用一次。

于 2012-11-05T05:23:47.370 回答
20

只需像这样设置参数auto_now_add

timestamp = models.DateTimeField(auto_now_add=True)

更新:

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

from django.utils import timezone

timestamp = models.DateTimeField(default=timezone.now)
于 2012-11-05T09:54:42.417 回答