2016-07-26 67 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