Django 预存信号

Django pre-save signal

我有一个模型的预保存信号。这个预保存信号做了一些背景 API activity 将新的和更新的对象联合到服务提供商和 return 无意义的数据,供我们作为参考存储在原始数据的位置。

API.

中的新方法和更新方法不同

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

预存信号有参数update_fields。我搜索了一些细节,发现这个参数在执行更新时可能包括所有字段。


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

关于如何解决这个问题,还有其他建议吗?我知道 post_savecreated 参数,但我更愿意在数据保存之前对其进行操作。

When creating an object, does anything get passed to update_fields?

No

When updating an object, do all fields get passed to update_fields, or just the ones that were updated?

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

My signal would need to know which fields were updated to send changes for just those fields.

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