Django - admin save_model() 和 post_save 信号之间的区别

max*_*max 4 django django-models django-forms django-admin

对于我的应用程序,当通过表单保存模型时,我需要执行额外的操作。在实践中,如果表单中存在某些条件,我需要在另一个模型中添加值。

为此,我有两种选择,但我想了解两者的优缺点。

  1. 使用 post_save 信号
  2. 覆盖 admin.py 中的 save_model 方法,因为文档中说“覆盖此方法允许执行保存前或保存后操作”。

我目前以这种方式使用后者

def save_model(self, request, obj, form, change):

    #some pre save operations....

    #this call the save model method
    super(MyModelAdmin, self).save_model(request, obj, form, change)

    #some post save operations...
Run Code Online (Sandbox Code Playgroud)

它有效

但我想明白的是:

  1. 对于我必须做什么,这两种方法有什么区别,什么是最正确的。
  2. save_model方法与管理界面的使用有关吗?如果我使用与 Django 管理不同的另一个前端会发生什么?
  3. 一般来说,覆盖 save_model 的保存前和保存后操作与使用信号之间有什么区别?

Dav*_*yan 5

我认为你说得对。这可能会帮助您理解其中的差异。

save_model当您尝试仅从 django adminModelAdmin创建或更新某些内容时调用的方法,但无论操作发生的位置如何,都会触发信号。如果您从django admin之外的某个地方更改模型,这意味着或方法中的操作将不起作用,但信号将适用于来自管理视图之外和自定义编写的代码块的信号。prepostsave_model