2016-10-02 38 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字段。這將需要收集一些數據並使過程變慢。如果您確實想更新該字段,則可以明確更新它。

相關問題