我为其中一个模型保存了一个预保存信号。此预保存信号执行一些后台API活动,以将新的和更新的对象联合提供给服务提供商,并返回无意义的数据供我们存储为原始数据中的引用。

API中的new和update方法不同。

理想情况下,如果用户要执行更新,则他们将从字段中清除无意义的数据并在其上键入内容。我的信号将需要知道哪些字段已更新以仅发送这些字段的更改,因为在更新中发送所有字段将发送无意义的引用作为原始数据,而不是更新。

预保存信号的自变量update_fields。我搜索了一些详细信息,发现执行更新时此参数可能包括所有字段。



关于update_fields,因为文档对此信息很少


创建对象时,是否有任何东西传递给update_fields?
更新对象时,所有字段都传递给update_fields还是仅传递给已更新的字段?


关于如何解决这个问题还有其他建议吗?我知道post_save具有created参数,但是我希望在数据保存之前对其进行操作。

最佳答案

创建对象时,是否有任何东西传递给update_fields?


No


  更新对象时,所有字段都传递给update_fields还是仅传递给已更新的字段?


取决于谁在调用save()方法。默认情况下,Django不设置update_fields。除非您的代码在设置了save()参数的情况下调用update_fields,否则它将重写数据库中的所有字段,并且pre_save信号将显示update_fields=None


  我的信号将需要知道哪些字段已更新以仅发送这些字段的更改。


除非您控制对象上调用save()方法的内容,否则不会使用update_fields获取此信息。该参数的目的不是让您跟踪已更改的字段,而是当您知道只需要写入数据库中的某些列时,便可以促进高效的数据写入。

关于python - Django预保存信号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38586282/

10-11 22:48
查看更多