2013-05-14 61 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