我的模型中有这个代码:
added_time = models.DateTimeField(
default=datetime.datetime.now()
)
迁移并重新启动uwsgi之后,我现在在MariaDB中获得第一个日期时间,以及所有下一个 - 重置uwsgi后与第一个完全相同。
2015-04-19 16:01:46
2015-04-19 16:01:46
2015-04-19 16:01:46
2015-04-19 16:01:46
我通过将代码更改为:
来修复它added_time = models.DateTimeField(
auto_now_add=True
)
虽然我解决了这个问题,但我不确定为什么会出现这样的行为?
答案 0 :(得分:21)
default=datetime.datetime.now()
。事后不会改变。要在添加/更新对象时评估now()
,您必须使用:
default=datetime.datetime.now
,将now
设置为可调用对象。 Django将在运行时调用它。
使用auto_now_add
的解决方案当然也是正确的(但在语义上不同 - 传递默认值会在每次保存模型时设置值,而auto_now_add
仅在创建时执行一次时间)。
不要失望,这是一个common错误。
答案 1 :(得分:5)
您需要将datetime.datetime.now
而不是datetime.datetime.now()
传递给默认值。否则,在初始化模型时计算默认值,因此在重新启动后总是得到相同的值。
请参阅Django documentation以获得更详尽的解释。
如果使用Django的时区支持,请记住使用django.utils.timezone.now代替datetime.datetime.now
。