Django auto_now 与 auto_now_add

Posted

技术标签:

【中文标题】Django auto_now 与 auto_now_add【英文标题】:Django auto_now vs auto_now_add 【发布时间】:2021-04-20 02:28:19 【问题描述】:

如果auto_nowauto_now_add 混淆,则会遇到问题。 auto_nowauto_now_add 是如何工作的?

auto_now : 每次使用models.save()models.create() 时都会创建时间,但如果使用query.update() 则不起作用,它只会更新一些数据但不会自动更新日期

auto_now_add : 只有第一次使用models.save()models.create() 时才会创建时间

它们应该如何使用?

auto_now_add 应与created_date 一起使用,auto_now 应与updated_date 一起使用

created_date = models.DateTimeField(auto_now_add = True)
updated_date = models.DateTimeField(auto_now = True)

【问题讨论】:

请帮助检查这里的答案:***.com/questions/51389042/… 这似乎不是一个问题。我试图让英语更符合语法,但这似乎是一个自我回答的问题。 【参考方案1】:

回答您的问题:如何最好地使用auto_now_addauto_now? - 您将它们与 DateTimeField 或 DateField 一起使用的想法是完全正确的!

auto_now_add 非常适合一次性修改模型上的字段,在第一次创建和保存模型实例时。正如您所指出的,这对于 created_attimestamp 字段来说非常棒,永远不需要再次更改。

auto_now 非常棒,每当您需要更改字段时,只要在模型实例上调用 .save() 方法即可。正如您所提到的,updated_at 将是一个很好的机会。

然而,这 2 个是互斥的,正如 Difference between auto_now and auto_now_add 中所述 - 所以不要创建模型字段并传递两个参数!

你的假设是正确的;只是想确认一下:)

【讨论】:

以上是关于Django auto_now 与 auto_now_add的主要内容,如果未能解决你的问题,请参考以下文章

Django auto_now 行为

django1.5.4数据库,auto_now时间不能自动更新

Django的auto_now=True没有自动更新

django model:auto_now_add 和 auto_now

python Django:如何使用auto_now = True手动设置/更新DateTimeField字段

django模型中auto_now和auto_now_add的区别