【发布时间】:2019-07-17 12:28:12
【问题描述】:
对于我的应用程序,当通过表单保存模型时,我需要执行额外的操作。在实践中,如果表单中存在某些条件,我需要在另一个模型中添加一个值。
为此,我有两个选择,但我想了解两者的优缺点。
- 使用 post_save 信号
- 覆盖 admin.py 中的 save_model 方法,因为在 documentation 中说“覆盖此方法允许执行保存前或保存后操作。”
我目前是这样使用后者的
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...
它可以工作
但我想明白的是:
- 对于我必须做的事情,这两种方法有什么区别,什么是最正确的。
- save_model 方法是否与管理界面的使用有关?如果我使用不同于 Django 管理员的另一个前端会发生什么?
- 一般来说,覆盖 save_model 和使用信号进行保存前和保存后操作有什么区别?
【问题讨论】:
-
在我看来,模型对象可以从应用程序内的任何位置保存,而不仅仅是 django 管理员。确保每次保存对象时都会发生某些事情的唯一方法是使用 pre/post_save 信号或覆盖
.save() 方法。之后,您所要做的就是注意批量更新。
标签: django django-models django-forms django-admin