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

时间:2016-10-02 18:29:18

标签: django django-models

来自django的

  

该字段仅在调用Model.save()时自动更新。使用其他方式(如QuerySet.update())更新其他字段时,不会更新该字段,但您可以在更新中为该字段指定自定义值。

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

1 个答案:

答案 0 :(得分:1)

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

  

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

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