我的某个型号有预保存信号。此预保存信号执行一些后台API活动,以将新的和更新的对象联合到服务提供者,并返回无意义的数据,以便我们将其作为参考存储在原始数据的位置。
新的和更新方法在API中有所不同。
理想情况下,如果用户要执行更新,他们将清除字段中无意义的数据并在其上键入内容。我的信号需要知道哪些字段已更新以仅发送这些字段的更改,因为发送更新中的所有字段除了更新之外还会发送无意义的引用作为原始数据。
预保存信号的参数为update_fields
。我搜索了一些细节,发现这个参数可能包括执行更新时的所有字段。
关于 update_fields ,因为文档几乎没有关于此内容的信息
关于如何解决这个问题还有其他一些建议吗?我知道post_save
有created
个参数,但我更愿意在数据被保存之前对其进行操作。
答案 0 :(得分:2)
创建对象时,是否有任何内容传递给update_fields?
No。
更新对象时,是否将所有字段传递给update_fields,或者仅传递给更新的字段?
取决于谁调用save()
方法。默认情况下,Django不会设置update_fields
。除非您的代码使用save()
参数集调用update_fields
,否则它将重写数据库中的所有字段,pre_save
信号将显示update_fields=None
。
我的信号需要知道哪些字段已更新才能发送这些字段的更改。
除非您控制在对象上调用save()
方法的内容,否则您将无法使用update_fields
获取此信息。该参数的目的不是让您跟踪哪些字段已更改 - 而是当您知道只需要编写数据库中的某些列时,便于有效地编写数据。