我想向 django admin 创建一个通知

Posted

技术标签:

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

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

【问题讨论】:

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

以上是关于我想向 django admin 创建一个通知的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 django admin 将记录插入数据库后添加功能?

当我在活动中发送消息时,我想向多个用户(即组的用户)发送通知

Django Admin,保存时调用函数

django admin - 选择反向外键关系(不创建,我想添加可用)

如何使用 Django admin 使用 Celery 创建自定义任务

Django 1.11 admin:创建 OneToOne 关系,它是 admin 中的对象