2016-10-02 98 views
0

来自django:为什么在使用QuerySet.update()时不会更新auto_now = True字段?

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

双方将不得不执行更新查询,所以背后是什么save.()的原因更新auto_now=True场和QuerySet.update()更新不及时的领域?

回答

1

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

最后,实现更新()不更新在SQL水平, 因此,不调用任何save()方法在你的模型,也没有 发出pre_save或post_save信号(这是 调用Model.save())的结果。

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

相关问题