我会尽力解释一个例子:
pre_save和post_save是signals,由型号发送。简单的说,在模型保存之前或之后采取的动作被调用。
>发出预先保存的信号。
>预处理数据。
>大多数字段不进行预处理 – 现场数据保持原样。
>准备数据库的数据。
>将数据插入数据库。
>发出后保存信号。
Django确实提供了覆盖这些信号的方法。
现在,
在实际保存到数据库之前,pre_save信号可以被覆盖进行一些处理 – 例如:(我不知道pre_save在我头上的理想位置的一个很好的例子)
假设您有一个ModelA,它存储对尚未编辑的所有ModelB对象的引用。为此,您可以注册一个pre_save信号,以在ModelB的保存方法被调用之前通知ModelA(没有任何阻止您在此处注册post_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)
在系统中创建User对象时,常见的用例是创建UserProfile对象。
您可以注册一个post_save信号,该信号创建一个与系统中每个用户对应的UserProfile对象。
信号是保持模块化和明确化的一种方式。 (如果我保存或更改ModelB中的某些东西,请明确地通知ModelA)
我会想到更具体的现实世界的例子,试图更好地回答这个问题。同时我希望这可以帮助你