我为其中一个模型保存了一个预保存信号。此预保存信号执行一些后台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/