Django DateTimeField auto_now_add 不起作用

15 投票
5 回答
14778 浏览
提问于 2025-04-16 17:03

在我的一个模型里,我设置了一个时间戳字段,具体如下:

created_datetime = models.DateTimeField(auto_now_add = True)

虽然在命令行里我可以创建一个对象并保存它,但在我的应用程序中却出现了一个错误,提示说 created_datetime 字段不能是空的。

我搞不清楚问题出在哪里!该怎么解决呢?

5 个回答

4

我之前遇到这个问题,搞了我很久。

后来发现是因为我的模型有一个自定义的主键,而在创建一些测试对象时,出现了一个错误,没有正确设置这个主键。

第一次运行的时候没问题,因为 auto_now_add 自动设置了 created_at 字段。第二次运行就出问题了,因为已经有一个主键为空的对象存在,所以它试图更新那个对象。而它想把 created_at 设置为 null,但在我的模型里这是不允许的。

所以如果你在遇到“在我的应用中,抛出了一个异常,提示 created_datetime 字段不能为 null”的错误时,可以检查一下是否是主键没有正确设置导致的。

我的解决办法就是正确设置主键。

15

据我所知,设置默认日期时间的最佳做法是使用以下代码:

created_datetime = models.DateTimeField(default=datetime.datetime.now)

别忘了导入 datetime 这个模块哦。

3

你可以这样做

created_datetime = models.DateTimeField(auto_now_add=True, auto_now=False)

撰写回答