我想向 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 - 选择反向外键关系(不创建,我想添加可用)