Django - 扩展LogEntry

时间:2010-11-14 04:54:20

标签: django django-models django-admin

我要求每当添加/更改/删除模型时,都应发送邮件通知。内容将更像django_admin_log条目。我只需要在我的模型中扩展此功能以发送邮件。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

Django_log_admin只会跟踪管理界面中所做的更改。如果在其他任何地方更改模型,则不会更新日志。但是,如果您只使用管理员更改就可以了,那么您可以使用django_log_admin和post_save信号的组合来完成这一操作。把它放在你的management.py:

from django.db.models.signals import pre_save
from django.dispatch import receiver
from django.contrib.admin.models import LogEntry
from django.core.mail import mail_admins
from django.template.loader import render_to_string

#will be triggered every time a LogEntry is saved i.e. every time an action is made.
@receiver(post_save, sender=LogEntry)
def send_notification_email(change, **kwargs):
    mail_admins(subject="model %(model) has been changed by %(user)" % 
                            {'model':change.content_type, 'user': change.user},
                message = render_to_string('change_email.html', { 'change': change }) )
对自己说:哇,django真的包括所有的电池:D

答案 1 :(得分:0)

你应该看看Django的signals。在您的情况下,您可以将处理程序与post_savepost_delete信号连接起来。通过built-in signal documentation查看您可能想要点按的其他人。无需入侵admin