如何重写Django模型保存方法?

124*_*142 0 python django

如何重写Django模型保存方法?

class Message(models.Model):
    """
    message
    """
    message_num = models.CharField(default=getMessageNum, max_length=16)  

    title = models.CharField(max_length=64)
    content = models.CharField(max_length=1024)

    def save(self, force_insert=False, force_update=False, using=None,
         update_fields=None):
        # I want send email there
        pass
Run Code Online (Sandbox Code Playgroud)

我的意思是,在Django模型中,如果我创建实例成功,我想调用一个函数,比如在函数中发送电子邮件。

我发现在 Django 模型中有一个save方法。我不确定是否应该编写其他代码,因为参数太多。

我的意思是我是否只应该关心我的发送电子邮件逻辑?

sch*_*ggl 5

当您覆盖该save方法时,您仍然必须确保它确实保存了实例。您可以通过简单地save通过super以下方式调用父类'来做到这一点:

class Message(models.Model): 
    # ...
    def save(self, *args, **kwargs):
        # this will take care of the saving
        super(Message, self).save(*args, **kwargs)
        # do email stuff  
        # better handle ecxeptions well or the saving might be rolled back
Run Code Online (Sandbox Code Playgroud)

您还可以将邮件发送连接到post_save(或pre_save,取决于您的逻辑)信号。您是否想以这种方式将一个或另一个分开取决于这两个动作的联系程度以及您的品味。

覆盖save为您提供了干预保存过程的选项,例如,您可以根据邮件发送成功还是根本不保存实例来更改字段的值。