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

Luc*_*ang 17 python django django-timezone

这个问题现在已经发生了几个星期,而且与我的项目提出的不同.

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

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


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

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

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


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

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

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

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

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

Jam*_*arp 53

上个星期刚刚进入了一个有这个领域的领域default=date.today().如果删除括号(在本例中为try default=timezone.now),则将可调用函数传递给模型,每次保存新实例时都会调用它.使用括号,它只在models.py加载时被调用一次.

  • 我不确定哪些例子会建议调用`datetime.now()`.当字段函数接收到该参数时,它只是一个日期时间对象. (3认同)

Rag*_*gar 11

只需auto_now_add像这样设置参数即可.

timestamp = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

更新:

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

from django.utils import timezone

timestamp = models.DateTimeField(default=timezone.now)
Run Code Online (Sandbox Code Playgroud)