2016-07-26 97 views
1

我有一個預保存信號爲我的一個模型。此預保存信號執行一些後臺API活動,以將新的和更新的對象聯合到服務提供商,並返回無意義的數據,供我們在原始數據的位置存儲爲參考。Django預保存信號

新API和更新方法不同。

理想情況下,如果用戶要執行更新,他們將清除字段中的無意義數據並鍵入它。我的信號需要知道哪些字段被更新以僅發送這些字段的更改,因爲發送更新中的所有字段將發送無意義的引用作爲除更新之外的原始數據。

預保存信號的參數爲update_fields。我搜索了一些細節,發現這個參數可能包含更新時的所有字段。


關於update_fields作爲文檔對此

  • 資料很少在創建對象時,沒有得到任何東西傳遞給update_fields?
  • 更新對象時,是否所有字段都傳遞給update_fields,或只傳遞更新的字段?

有沒有關於如何解決這個問題的其他建議?我知道post_savecreated的說法,但我希望在數據保存之前對數據進行操作。

回答

2

創建對象時,是否有任何事情傳遞給update_fields?

No

更新對象時,是否所有字段都傳遞給update_fields,或者只傳遞給update_fields?

取決於誰在調用save()方法。默認情況下,Django不會設置update_fields。除非您的代碼使用update_fields參數集調用save(),否則它將重寫數據庫中的所有字段,並且pre_save信號將看到update_fields=None

我的信號需要知道哪些字段已更新,只發送這些字段的更改。

除非您控制對對象調用save()方法的方法,否則將不會使用update_fields獲取此信息。該參數的目的不是讓您跟蹤哪些字段發生了變化 - 而是您知道只需要編寫數據庫中的某些列時便於高效地寫入數據。

+0

我會寫一個單獨的更新表單並在那裏設置'update_fields' ... – henryaaron