覆盖ModelAdmin的方法

时间:2011-09-19 23:17:55

标签: django django-models django-admin

我正在开发一个Django项目,任何时候管理员在管理控制台(CRUD)中执行某些操作,一组人会收到通知。我在ModelAdmin上指出了三个名为log_addition,log_created和log_deleted的方法,它们将所有必要的信息保存到一个名为“django_admin_log”的特殊数据库中。

我将以下代码放入我的admin.py:

class ModelAdmin(admin.ModelAdmin):
    def log_addition(self, request, object):
      subject = 'admin test of creation'
      message = 'admin creation detected'
      from_addr = 'no_reply@example.com'
      recipient_list = ('luka@example.com',)
      send_mail(subject, message, from_addr, recipient_list)

      return super(ModelAdmin, self).log_addition( *args, **kwargs )

但是,当我创建新用户时,此代码会被忽略。许多帖子实际上建议创建一个不同的类名(MyModelAdmin),我不完全确定原因 - 重点是覆盖现有模型。我尝试过,但结果相同。有人能指出我正确的方向吗?您究竟如何覆盖现有类的方法并为其提供一些额外的功能? 谢谢! 卢卡

编辑:我想通了,似乎我必须取消注册并重新注册用户才能让我的工作变更。

1 个答案:

答案 0 :(得分:2)

删除最后的返回

如果这不起作用,您可以将代码放在名为 add_view 的函数中:

class ModelAdmin(admin.ModelAdmin):
    add_view(self, request):
        ...
        super(ModelAdmin, self).add_view( *args, **kwargs)

可以覆盖此功能以向管理员视图添加功能。如果你看一下管理员代码:

https://code.djangoproject.com/browser/django/trunk/django/contrib/admin/options.py#L923

你会看到你试图覆盖的函数是从add_view函数中调用的,所以你可以同样把代码放在这里