我将尽力用一个例子来解释它:
pre_save和
post_save是信号由模型发送。用简单的话来说,
save就是在模型之前或之后调用的动作。
A
save
触发以下步骤
- 发出预保存信号。
- 预处理数据。
- 大多数字段不进行预处理-字段数据保持不变。
- 为数据库准备数据。
- 将数据插入数据库。
- 发出后保存信号。
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)
我将考虑更具体的现实世界示例,以更好地回答这个问题。同时,我希望这对您有帮助



