【问题标题】:Compare values while saving upon a model in django?在 django 中保存模型时比较值?
【发布时间】:2013-05-06 08:54:18
【问题描述】:

这是我的模特

class Profile(models.Model):
    activate = models.BooleanField(default=False)

现在我想做的是,每当管理面板中的某个人实现这一点时,都会向该帐户已激活的特定用户发送一封电子邮件。

但我只想在值从假变为真时发送邮件。如果该值已经为真,我不想发送任何邮件。

用 post save 尝试过这个东西,但它会在 Profile Model 上的每次保存操作后发送电子邮件

【问题讨论】:

  • 你希望它在前端的值发生变化或即将或已经保存到数据库时发送电子邮件?
  • 如果有人从前端激活了用户配置文件,我想发送一封电子邮件。当他点击保存时,电子邮件应该发送给用户,让他知道他的帐户激活。虽然我的问题已经解决,但@stalk 提供的代码可以根据我的需要正常工作。

标签: django django-models django-signals


【解决方案1】:

这里的代码,可以做到(使用pre_save signal):

from django.db.models.signals import pre_save
from django.dispatch import receiver

@receiver(pre_save, sender=Profile)
def profile_changed(sender, instance, *args, **kwargs):
    if instance.activate:
        if not instance.pk:
            print "Send email to user here"
        else:
            activate_was = sender._default_manager.filter(pk=instance.pk)\
                .values("activate").get()["activate"]
            if activate_was != instance.activate:
                print "Send email to user here"

【讨论】:

  • 不客气。如果回答有用,可以采纳。
猜你喜欢
  • 1970-01-01
  • 2020-05-27
  • 2012-03-16
  • 2014-06-15
  • 2022-12-29
  • 2023-03-23
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多