【问题标题】:Django: nullable DateTimeField populates with the current timestamp?Django:可为空的 DateTimeField 填充当前时间戳?
【发布时间】:2025-12-28 12:20:16
【问题描述】:

在我的模型中,我添加了一个 DatetimeField,如下所示:

created = models.DateTimeField(auto_now_add=True, null=True)

但是,在运行迁移后,所有现有行似乎都将 created 设置为当前时间戳。我希望所有现有行在迁移时都有created = NULL。如何做到这一点?

【问题讨论】:

标签: python django datetime django-models django-2.2


【解决方案1】:

您需要分两个阶段执行此操作。首先创建没有 auto_now_add 的字段并进行迁移,这将为每个人创建默认值。然后,将 auto_now_add 添加回来,并创建另一个迁移,这会将其设置为以后所有项目的默认值。

【讨论】:

  • 这行得通,谢谢。这种行为是否记录在某处?我觉得它有点不明显/令人困惑。
  • 什么行为?什么令人困惑?
  • 来自auto_now_add 上的文档:Automatically set the field to now when the object is first created. 这里没有创建对象,所以不应该将该字段设置为 NULL(隐式默认值)吗?
【解决方案2】:

您可能已将 default 值提供给当前时间戳。因此,在您运行迁移后,它会使用当前时间戳更新所有现有记录。

所以,在创建的迁移文件中将默认设置为None

【讨论】:

  • 我确实希望为 new 记录设置该字段。但是将现有记录设置为现在没有多大意义。
  • @planetp 更新问题中的迁移文件。