我知道我可以覆盖或定义pre_save, save, post_save
来在保存模型实例时执行我想要的操作.
在哪种情况下,哪一种更受欢迎?为什么?
我知道我可以覆盖或定义pre_save, save, post_save
来在保存模型实例时执行我想要的操作.
在哪种情况下,哪一种更受欢迎?为什么?
我会尽量举例说明:
pre_save
和post_save
是由模型发送的signals.简而言之,调用模型save
之前或之后要采取的动作.
A save
triggers the following steps
Django确实提供了一种覆盖这些信号的方法.
现在
在实际保存到数据库之前,pre_save
信号可以被覆盖以进行某些处理-示例:(我不知道在我的头顶哪个地方pre_save
比较理想)
假设您有一个ModelA
,它存储了对ModelB
的所有对象的引用,这些对象已经过not次编辑.为此,您可以在调用ModelB
的save
方法之前注册一个pre_save
信号来通知ModelA
(这里也没有什么可以阻止您注册post_save
信号).
现在 save
method (it is not a signal) of the model is called - By default, every model has a save
method, but you can override it:
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
对象,对应于系统中的每个User
.
信号是保持事物模块化、明确化的一种方式.(如果i save
或更改ModelB
中的内容,请明确通知ModelA
)
为了更好地回答这个问题,我将想出更具体的现实世界的例子.同时,我希望这能帮助你