2013-05-14 59 views
0

好吧,让我解释一下。django admin super(type,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 

这不是工作,因为“自我”是一个A_Admin类对象,而不是B_Admin obejct。

那么有什么办法可以在B_Admin里面获得calss A_Admin的代理吗? 我只想覆盖A的changelist_view并将其称为B内部。

这可能吗?

在此先感谢

+1

我不知道,但是我看不到'return'结尾=) – lalo 2013-05-14 16:34:14

+0

好了,还有一个返回,它返回的是urlpattern。让我加上 – 2013-05-14 17:02:17

回答

0

你应该只实例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] 
+0

这听起来更有吸引力。让我尝试, – 2013-05-14 17:42:19