我将尽力用一个例子来解释它:
pre_save
和post_save
是信号由模型发送。用简单的话来说,save
就是在模型之前或之后调用的动作。
Asave
触发以下步骤
Django确实提供了一种覆盖这些信号的方法。
现在,
pre_save
在实际保存到数据库之前,可以忽略信号进行某些处理-示例:(我不知道pre_save
如何在头顶上找到一个理想的例子)
比方说,你有ModelA
哪些商店参考所有的对象ModelB
已 被编辑呢。为此,您可以注册一个pre_save
信号,以便ModelA
在ModelB
的save
方法被调用之前立即进行通知(post_save
这也不会阻止您注册信号)。
现在,save
调用模型的方法(不是信号)-默认情况下,每个模型都有一个save
方法,但是您可以覆盖它:
class ModelB(models.Model):
def save(self):
#do some custom processing here: Example: convert Image resolution to a normalized value
super(ModelB, self).save()
然后,您可以注册post_save
信号(这是更多使用的信号pre_save
)
常见的用例是在系统中创建UserProfile
对象时创建User
对象。
您可以注册一个post_save
信号,该信号创建一个UserProfile
对应User
于系统中每个对象的对象。
信号是使事物保持模块化和明确的一种方式。(明确通知ModelA
我save
或在中进行更改ModelB
)
我将考虑更具体的现实世界示例,以更好地回答这个问题。同时,我希望这对您有帮助