为一些疯子道歉。
如果模型实例是新创建的,我想重写django models save方法并调用一些额外的代码。 当然,我可以使用信号或者检查模型是否有空的pk字段,如果有,创建临时变量,然后调用代码:
Class EmailModel(models.Model): email = models.EmailField() def save(self, *args, **kwargs) is_new = self.pk is None super(EmailModel, self).save(*args, **kwargs) # Create necessary objects if is_new: self.post_create() def post_create(self): # do job, send mails pass
但我喜欢有一些漂亮的代码,避免在save方法中使用临时变量。 因此,问题是:是否可以在super save_base parent method调用之后发现模型的实例是否是新创建的对象?
我查过姜戈的消息来源找不到正确的方法。
谢谢
我们有 related post
在这种情况下,真实信号是最好的方法。
你可以使用 post_save() 在监听器中,只需检查当前模型实例是否存在贷项集,如果不存在,则创建一个贷项集。 那是我的选择 -没有必要过多地完成这样一项简单的任务。
post_save()
当然如果你 真正地 需要知道模型是什么时候开始的(我怀疑)使用 post_init() 信号。您不需要重写save()方法来设置其他变量。刚好赶上 后一项() 信号,或 pre_save() ,只需更改/添加所需内容。我不知道该怎么做 save() 方法并检查这是否是新实例-这就是信号存在的原因。
post_init()
后一项()
pre_save()
save()