覆盖所有模型的Django admin.ModelAdmin函数

时间:2009-07-31 00:03:00

标签: django django-admin

我有点拼凑contrib.databrowse(查看)和contrib.admin(编辑),我想覆盖admin.ModelAdmin中的 response_change 函数,这样当单击“保存”,它将重定向回databrowse中的对象而不是管理员。我知道如何在admin.py中为特定模型执行此操作,例如:

class WhateverAdmin(admin.ModelAdmin):
    def response_change(self, request, obj):
        # stuff

admin.site.register(Whatever, WhateverAdmin)

但我想将它应用于我的所有模型,而不是一遍又一遍地复制函数(即在admin.ModelAdmin本身中覆盖它)。我应该在哪里以及如何做到这一点?

感谢。 :)

2 个答案:

答案 0 :(得分:1)

您可以让您的管理类继承WhateverAdmin类。

例如,您的应用程序布局为......

\site_defaults
    __init__.py
    admin.py
\your_app_1
    __init__.py
     models.py
     admin.py
\your_app_2
    __init__.py
     models.py
     admin.py

对于您拥有的2个应用,在admin.py中,代码就像......

from site_defaults.admin import WhateverAdmin

class YourApp1Admin(WhateverAdmin):  # << note it's not admin.ModelAdmin
    # code over here

答案 1 :(得分:1)

感谢T. Stone's Idea,这是我的解决方案。

如果我没有更改任何其他内容,我认为不会使用相同的Admin类注册每个模型。需要特殊更改的那些继承新类,其余用它调用admin.site.register:

class MyModelAdmin(admin.ModelAdmin):
    def response_change(self, request, obj):
        # code 

class SomethingAdmin(MyModelAdmin): 
    # code specific to the Something model 

admin.site.register(Something, SomethingAdmin)
admin.site.register(Another, MyModelAdmin) 
admin.site.register(OneMore, MyModelAdmin)