【问题标题】:Send an e-mail notification when a Django CharField is modified via the admin site通过管理站点修改 Django CharField 时发送电子邮件通知
【发布时间】:2011-05-08 20:02:22
【问题描述】:

我有一个通常为空的 CharField。当字段设置为非空值时,我想向所有经理发送电子邮件通知(使用mail_managers)。对此字段的更改只能通过管理站点进行。

我认为这可能是我可以通过信号执行的操作,但我没有看到 documentation 中列出的适当信号。有什么想法吗?

【问题讨论】:

  • 您想在保存记录时发送电子邮件,还是在其他事件时发送电子邮件?
  • 我想在第一次保存该 CharField 模型字段中的非空值时发送一封电子邮件。

标签: django django-admin django-signals


【解决方案1】:

如果您不想在再次更改字段时更新该字段,则需要向该字段添加一些历史记录,但只需向您的模型添加一个类似于应该工作的保存方法:

从 django.db 导入模型

class Test(models.Model):
    empty_field = models.CharField(max_length=20, blank=True)
    def save(self):
        if self.pk is not None:
            orig = Test.objects.get(pk=self.pk)
            if orig.empty_field != self.empty_field and len(self.empty_field) > 0:
                mail_managers ... 
        super(Test, self).save() # Call the "real" save() method                

http://www.djangoproject.com/documentation/models/save_delete_hooks/Django: When saving, how can you check if a field has changed?

【讨论】:

  • 啊!历史价值将是关键。格。讨厌我错过了显而易见的事情。一旦我创建了某种 old_value 字段,我就可以使用信号机制。谢谢!
  • 更新了代码,抱歉来晚了,没想到。您只需要一个布尔字段来检查该字段是否曾经从空更改为某个值,如果您想确保在值更改回空然后再次更改时不发送邮件:)
  • 好思想 sunn0.欣赏它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 2022-06-14
  • 2020-02-06
  • 1970-01-01
相关资源
最近更新 更多