为什么auto_now=True字段设计为在使用QuerySet.update()时不更新



来自django:

该字段只有在调用Model.save((时才会自动更新。当以其他方式(如QuerySet.update(((更新其他字段时,该字段不会更新,但您可以在类似的更新中为该字段指定自定义值。

两者都必须执行更新查询,那么save.()更新auto_now=True字段和QuerySet.update()不更新字段的原因是什么?

Update查询的目的是比常规的字段更改和保存模式更快,因此它不调用save()方法,该方法处理更新auto_now字段、发送信号等。如果您不确定自己在做什么,那么在模型上显式调用save()总是一个好主意。高级且"限制较少"的方法,如updatebulk_create,速度更快,适用于在数据库级别编辑数据。来自Django文档:

最后,认识到update((在SQL级别执行更新,因此,不会在模型上调用任何save((方法,也不会发出pre_save或postrongave信号(这是调用Model.save(((。

如果您希望得到更技术性的解释,那么更新查询可能不会检查表是否有auto_now字段。这将需要一些数据收集,并使过程变得更慢。如果确实要更新字段,可以显式更新它。

最新更新