2011-11-02 99 views
4

如何查找任意模型的管理員更改網址?查找管理員更改任意Django模型的網址

如果我知道的模型,我可以做這樣的事情弄的網址:

>>> print urlresolvers.reverse('admin:myapp_mymodel_change', args=(obj.id,)) 
/admin/myapp/mymodel/123/ 

我有一個模型,一個通用外鍵,我想提供在管理員的一個鏈接對象的相應更改頁面。由於它可以是任何類型的模型,我不能輕易使用reverse()。有什麼辦法可以簡單地將這一點告訴以下人員?

>>> get_admin_change_url(obj) 
/admin/myapp/mymodel/123/ 

回答

5

一旦有了對象,你可以訪問其應用標籤和名稱在其_meta類,然後構建管理變更網址的名稱動態。

app_label = obj._meta.app_label 
model = obj._meta.module_name 

reverse('admin:%s_%s_change' % (app_label, model), args=(obj.id,)) 
+0

請注意,這裏假定您的admin.py與您的models.py匹配,這通常會。如果您使用代理模型,或者在不同的app_label下顯示模型的modeladmin,這將不起作用。 – Cerin

+0

如果您將代理模型用作ModelAdmin的*模型,它將會正常工作。我不確定你爲什麼不會那麼做,因爲在那時你不會真正在做正確的事情。 –