2011-09-19 91 views
1

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

我把下面的代码到我的admin.py:

class ModelAdmin(admin.ModelAdmin): 
    def log_addition(self, request, object): 
     subject = 'admin test of creation' 
     message = 'admin creation detected' 
     from_addr = '[email protected]' 
     recipient_list = ('[email protected]',) 
     send_mail(subject, message, from_addr, recipient_list) 

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

此代码然而,当我创建新用户被忽略。许多帖子实际上建议创建一个不同的类名(MyModelAdmin),我不完全确定为什么 - 重点是覆盖现有的模型。我试过了,但结果相同。任何人都可以指出我正确的方向吗?如何重写现有类的方法并给它一些额外的功能? 谢谢! Luka

编辑:我想通了,似乎我不得不取消注册,并重新注册用户为我的变化工作。

回答

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函数中调用,所以你同样可以把代码在这里

+1

其实,我不不想重载add_view,因为它专门使用这三种方法中的一种,所以我宁愿直接覆盖这些方法。正如我刚刚发现它,我需要以下:'admin.site.unregister(用户) admin.site.register(用户,MyModelAdmin)',然后我的功能踢。然而,一个奇怪的副作用踢在 - 我的管理控制台丢失了一堆帮助者的东西,如过滤器视图等,但功能仍然完好无损。 – Lukich