Админ django супер (тип, obj)
Хорошо, позвольте мне объяснить это.
Я работаю над простым проектом администратора django.
В файле admin.py у меня есть следующие классы администратора:
class A_Admin(admin.ModelAdmin):
#some stuff
class B_Admin(admin.ModelAdmin):
#some stuff
Я хочу переопределить метод get_urls() A_Admin, чтобы при нажатии кнопки на странице изменения экземпляра A_Admin она перенаправляла страницу на страницу списка изменений B_Admin.
(Я знаю, что есть много способов сделать то, что я хочу, и то, что я упомянул выше, не самое лучшее, но это то, что я хочу. Поэтому давайте пропустим обсуждение, почему я настаиваю на этом решении.)
Я хочу следующее:
def get_urls(self):
#django's code
#inside the urlpattern
urlpattern = (
#default urls from django admin
.....
url(r'^some_url$',
wrap(super(B_Admin, self).changelist_view),
name='%s_%s_delete' % info),
....)
return urlpatterns
Это не работает, так как 'self' является объектом класса A_Admin, а не объектом B_Admin.
Так есть ли способ получить прокси Calss A_Admin внутри B_Admin? Я просто хочу переопределить changelist_view для A и вызвать его внутри B.
Это возможно?
заранее спасибо
1 ответ
Вы должны просто создать экземпляр B_Admin и использовать его метод.
Я считаю, что следующий код должен работать:
from django.contrib import admin
from my_app.models import B_Model # The model for which B_Admin is used
def get_urls(self):
#django's code
#inside the urlpattern
urlpattern = (
#default urls from django admin
.....
url(r'^some_url$',
wrap(B_Admin(B_Model, admin.site).changelist_view),
name='%s_%s_delete' % info),
....)
return urlpatterns
ОБНОВЛЕНИЕ: Скорее всего, B_Admin
был уже создан, когда вы позвонили
admin.site.register(B_Model, B_Admin)
Так что вместо того, чтобы делать
B_Admin(B_Model, admin.site)
опять же вы можете просто получить его из AdminSite
Реестр:
admin.site._registry[B_Model]