【问题标题】:I want to create a notification to django admin我想向 django admin 创建一个通知
【发布时间】:2015-08-31 01:00:02
【问题描述】:

每当在数据库中添加类别时,我想创建一个通知给 django 管理员。然后管理员应单击布尔字段并发布类别。

【问题讨论】:

  • 嗨。你都尝试了些什么?什么没用?此外,你只告诉了你想要的。你有什么问题?
  • 我曾尝试在 django 中使用消息,但它只在特定会话之前有效,我不希望那样。我只想在 django 管理页面上有一个通知面板(就像 facebook 用户通知一样。)

标签: django python-2.7 django-admin


【解决方案1】:

您可以覆盖类别模型上的 save() 方法 - 这是一些示例基本代码...

class Category(models.Model):

    def save(self, *args, **kwargs):
            if not self.pk:
                #no pk so it is new
                try:
                    send_mail('Subject here', 'Here is the message.', 'from@example.com',
    ['superuser@mail.com'], fail_silently=True)
                except:
                    # do something a bit more elaborate here, like logging
                    pass

            else:
                #do something if it is an update or...
                pass
            super(Category, self).save(*args, **kwargs)

走这条路,记得导入 send_mail 功能...

from django.core.mail import send_mail

另外,您可以从 db 中即时获取超级用户 - 或从设置文件中导入 - 我以硬编码为例。

编辑:请参阅 Brandon 关于 post_save 的评论。这可能是一个更好的解决方案,尽管稍微先进一些。如果您不想走那条路,请将电子邮件逻辑包装在 try/except 块中,以避免电子邮件失败等次要事件导致您的存档崩溃。

【讨论】:

  • 我建议在 post_save 信号中执行此操作,而不是 UI 未被阻止。
  • @Brandon 将其移动到 post_save 信号不会使其异步。要异步发送电子邮件,您需要使用 celery 之类的东西(或分叉该过程,我不推荐)
  • @Alasdair 我知道它不是异步的,但 post_save 不会阻止视图处理......还是我完全错了?
  • 我的理解是 post_save 将在保存完成后触发 - 这是一个好处,因为它将像这样的额外逻辑与 save() 分开,但它仍然需要在响应之前进行处理生成。但是,就您而言,布兰登可能是一个更好的地方:)
  • 我实际上想要 django 管理页面上的通知面板,而不是发送电子邮件。我希望管理员收到通知,就像 facebook 用户通知一样。
猜你喜欢
  • 2013-09-01
  • 2018-02-22
  • 2020-08-25
  • 2020-11-03
  • 2020-04-13
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2018-03-02
相关资源
最近更新 更多