问题 Django DateTimeField auto_now_add无效


在其中一个模型中,我设置了一个时间戳字段,如下所示:

created_datetime = models.DateTimeField(auto_now_add = True)

虽然在shell中我能​​够创建一个obj并保存它,但是在我的应用程序中它引发了一个异常,即created_datetime字段不能为null。

事情出了问题困惑!!如何重新获得它。


3816
2018-05-05 14:58


起源

更好地使用自定义 save() 而不是使用 auto_now_add。 读这个。 - Konstant


答案:


你可以做这样的事情

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

2
2018-05-31 09:53



我不明白 - 这有何以及为何有帮助? - frabcus


据我所知,默认日期时间的最佳做法是使用以下内容:

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

不要忘记导入日期时间


12
2018-05-05 15:21



是否有类似的方法 auto_now 还是现在很好? - Flowpoke
我相信最好的做法 auto_now 是压倒一切 save() 并手动设置日期时间。 - Alex Jillard
截至2018年,此信息已过时。根据django的最佳实践是使用auto_now = True。 - Anuvab Mohanty


我有这个,它真的困惑了我多年。

原来我的模型有一个自定义主键,这是由于在构造一些测试对象时没有设置它的bug。

这第一次很好用 auto_now_add 组 created_at。第二次没有因为具有空主键的对象已经存在,所以它正在进行更新。它试图将其设定为 created_at null,这在我的模型中是不允许的。

所以值得检查一下,如果您最终在这个问题上出现错误“在我的应用程序中它引发了一个异常,即created_datetime字段不能为空”,这可能是因为没有正确设置主键。

解决方案是我正确设置主键。


0
2018-06-22 11:02





以下方法是在django文档的“part1”中

from django.utils import timezone
p = Poll(question="What's new?", pub_date=timezone.now())

-1
2017-08-17 14:19