代码之家  ›  专栏  ›  技术社区  ›  HardQuestions

在Django模型中后期创建实例代码调用

  •  1
  • HardQuestions  · 技术社区  · 14 年前

    为一些疯子道歉。

    如果模型实例是新创建的,我想重写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

    1 回复  |  直到 14 年前
        1
  •  3
  •   bx2 rsrajesh    14 年前

    在这种情况下,真实信号是最好的方法。

    你可以使用 post_save() 在监听器中,只需检查当前模型实例是否存在贷项集,如果不存在,则创建一个贷项集。 那是我的选择 -没有必要过多地完成这样一项简单的任务。

    当然如果你 真正地 需要知道模型是什么时候开始的(我怀疑)使用 post_init() 信号。您不需要重写save()方法来设置其他变量。刚好赶上 后一项() 信号,或 pre_save() ,只需更改/添加所需内容。我不知道该怎么做 save() 方法并检查这是否是新实例-这就是信号存在的原因。