我来解释一下。
我正在做一个简单的django管理项目。
在admin.py文件中,我有以下管理类:class A_Admin(admin.ModelAdmin):
#some stuff
class B_Admin(admin.ModelAdmin):
#some stuff
我想重写A_Admin的get_urls()方法,如果我点击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对象。
所以有没有办法得到类A_Admin内B_Admin的代理?我只想重写A的changelist_view并在b中调用它
这可能吗?
Thanks in advance
您应该实例化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
UPDATE:最有可能的是,当你调用
时,B_Admin
已经实例化了admin.site.register(B_Model, B_Admin)
所以不写
B_Admin(B_Model, admin.site)
你可以从AdminSite
的注册表中获得它:
admin.site._registry[B_Model]