Django的默认值= timezone.now()使用“旧”时间节省记录(Django defau

2019-07-03 13:54发布

这个问题已经发生,现在和关闭了几个星期,这是不同于任何已经拿出了我的项目。

所使用的模型中的两个时间戳字段,这是默认设置为timezone.now()

这是引发错误标志序列:


  • 模型中的一个在时间7:30 PM创建

  • 模型中的两个在时间10:00 PM被创建,但在MySQL数据库它存储为7:30 PM!

创建的每个模型都有其时间戳在7:30 PM,而不是实际的时间保存,直到某个时间通过。 然后,一个新的时间设置,所有的以下车型有新的时间...的bizzare


一些额外的细节可以在发现问题的帮助:

我有一堆的,我用它来剥夺他们的时区我的方法tzinfo的并与UTC替换它们。

这是因为我做了timezone.now() - creationTime计算来创建一个“模型被张贴此前不久”功能的项目。 然而,这真的不应该是问题的原因。

我不认为使用datetime.datetime.now()将使任何区别两种。

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

Answer 1:

恰好碰到了这最后一周为过场default=date.today() 如果去掉括号(在这种情况下,尝试default=timezone.now ),那么你传递一个可调用的模式,会在每个新的实例被保存时调用。 随着括号,它才会被调用一次时models.py负载。



Answer 2:

只需设定参数auto_now_add这样。

timestamp = models.DateTimeField(auto_now_add=True)

更新:

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

from django.utils import timezone

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


文章来源: Django default=timezone.now() saves records using “old” time