我有点拼凑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本身中覆盖它)。我应该在哪里以及如何做到这一点?
感谢。 :)
答案 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)