python - 模型中的 Django default=datetime.now() 在 uwsgi 重置后总是保存相同的日期时间

标签 python django datetime uwsgi

我的模型中有这段代码:

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
)

虽然我解决了问题,但我不确定为什么会出现这种行为?

最佳答案

default=datetime.datetime.now() 在模型的解析/编译时进行评估。之后不会更改。要在添加/更新对象时评估 now(),您必须使用:

default=datetime.datetime.now,将 now 设置为可调用。 Django 会在运行时调用它。

您使用 auto_now_add 的解决方案当然也是正确的(但在语义上不同——传递默认值将在每次保存模型时设置值,而 auto_now_add 仅在创建时执行一次)。

别灰心,这很正常common错误。

关于python - 模型中的 Django default=datetime.now() 在 uwsgi 重置后总是保存相同的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29733203/

相关文章:

python - 如何使用python设置运行时保存文件的路径?

python - 从 tf.contrib.layers.conv2d 切换到 tf.nn.conv2d

django - 缺少 1 个必需的位置参数 : 'pk'

python - 将纪元时间戳转换为 yyyy/mm/dd hh :mm

php - 如何检查mysql中是否存在数据时间?

python - Emacs shell 输出缓冲区高度

Python3 - 为什么这段代码出现在索引之外?

html - 使用 {% include %} 在 Django 中重用 CSS

jquery - 显示 ajax Django 错误

node.js - 如何将 Int 值从 mssql 转换为小时(时间)到 EJS