django admin super(type, obj)



我来解释一下。

我正在做一个简单的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]

相关内容

最新更新