Переопределение функции admin.ModelAdmin в Django для всех моделей - PullRequest
1 голос
/ 31 июля 2009

Я как бы соединяю contrib.databrowse (для просмотра) и contrib.admin (для редактирования), и я бы хотел переопределить функцию response_change в admin.ModelAdmin, чтобы при нажмите сохранить, он перенаправляет обратно на объект в базе данных, а не администратора. Я знаю, как сделать это для конкретной модели в admin.py, например:

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

admin.site.register(Whatever, WhateverAdmin)

но я хотел бы применить это ко всем моим моделям, не копируя функцию снова и снова (т.е. переопределяя ее в самом admin.ModelAdmin). Где и как мне это сделать?

Спасибо. :)

Ответы [ 2 ]

1 голос
/ 31 июля 2009

Вот мое решение благодаря T. Идея камня .

Я не думал регистрировать каждую модель с одним и тем же классом 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) 
1 голос
/ 31 июля 2009

Ваши классы администратора могут наследоваться от класса WhwhatAdmin.

Так, например, ваше приложение выложено как ...

\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
...