Django - 发送关于模型更改的电子邮件

7 email django model

我想在模型中更改特定字段时发送电子邮件.可能吗?这是我正在寻找的.我有一个包含BooleanField的配置文件模型,当管理员选择为true时,我想向用户发送电子邮件.我知道我可以把它放在"def save(self):"中,但是,只要模型被更改并且字段为真,它就会触发电子邮件.如果字段从False更改为True,有没有办法让它只有电子邮件?

Ser*_*nko 11

保存方法是您想要做的完美的好地方:

def save(self):
    if self.id:
        old_foo = Foo.objects.get(pk=self.id)
        if old_foo.YourBooleanField == False and self.YourBooleanField == True:
            send_email()
    super(Foo, self).save()
Run Code Online (Sandbox Code Playgroud)

  • 覆盖保存的一个缺点是:send_email()调用将阻塞,直到完成执行.在页面再次加载之前,用户可能必须等待非常重要的时间.如果这不是一个问题,那么这很好; 否则,我建议采用下面提到的信号方法. (4认同)

Rob*_*jic 6

您可以使用django-model-changes来做到这一点,而无需额外的数据库查找:

from django.db import models
from django.dispatch import receiver
from django_model_changes import ChangesMixin

class MyModel(ChangesMixin, models.Model):
   flag = models.BooleanField()

@receiver(pre_save, sender=MyModel)
def send_email_if_flag_enabled(sender, instance, **kwargs):
    if instance.previous_instance().flag == False and instance.flag == True:
        # send email
Run Code Online (Sandbox Code Playgroud)