2011-03-04 40 views
20

儘管我喜歡django文檔,但the section on bookmarklets in the admin卻很奇怪。我的問題是這樣的:如果我在一個視圖中,並且我有一個django模型(或者在某些情況下,是一個實際的對象),我該如何到達該模型(或對象)的相關管理頁面, ?如果我有對象coconut_transportation.swallow.objects.all()[34],我怎樣才能跳轉到管理頁面來編輯特定的燕子?對於django模型,我如何獲得django管理員URL來添加另一個或列表對象等?

同樣,如何獲取管理頁面的URL以添加另一個燕子?

回答

45

http://docs.djangoproject.com/en/dev/ref/contrib/admin/#reversing-admin-urls

obj = coconut_transportation.swallow.objects.all()[34] 

# list url 
url = reverse("admin:coconut_transportation_swallow_changelist") 

# change url 
url = reverse("admin:coconut_transportation_swallow_change", args=[obj.id]) 

# add url 
url = reverse("admin:coconut_transportation_swallow_add") 
+0

特定模型實例修改列表不是 – 2014-03-20 20:19:29

+0

@NickT,良好的通話「對象名單」。更改列表沒有參數 – 2014-03-20 20:44:36

10

您可以從實際的對象實例檢索此,這個工作對我來說:

from django.core import urlresolvers 
from django.contrib.contenttypes.models import ContentType 

content_type = ContentType.objects.get_for_model(object.__class__) 
object_admin_url = django.core.urlresolvers.reverse("admin:%s_%s_change" % (content_type.app_label, content_type.model), args=(object.pk,)) 

看到這個:http://djangosnippets.org/snippets/1916/

+0

我喜歡這個,因爲它適用於任何對象 - 很好:-) – guettli 2017-03-22 15:21:39

9

實際上,你可以檢索信息未做對ContentTypes的查詢

只需添加到您的模型類:

def get_admin_url(self): 
    return urlresolvers.reverse("admin:%s_%s_change" % 
     (self._meta.app_label, self._meta.model_name), args=(self.pk,)) 
+0

它是self._meta.model_name(不是module_name)。除此之外,很好的解決方案,謝謝! – 2015-05-30 18:01:01

+0

module_name VS model_name最終取決於Django版本。請參閱:https://code.djangoproject.com/ticket/19689 – 2016-05-26 12:03:42

相關問題