web-dev-qa-db-ja.com

Djangoモデルの場合、Django管理URLを取得して別のURLを追加したり、オブジェクトを一覧表示したりするにはどうすればよいですか?

Djangoドキュメント、 管理者のブックマークレットのセクション は奇妙に曖昧です。

私の質問はこれです:私がビューにいて、Djangoモデル(または、場合によっては実際のオブジェクト)を持っている場合、それに関連する管理ページにアクセスするにはどうすればよいですか?モデル(またはオブジェクト)?オブジェクトcoconut_transportation.swallow.objects.all()[34]がある場合、管理ページに直接ジャンプしてその特定のツバメを編集するにはどうすればよいですか?

同様に、管理ページのURLを取得して別のツバメを追加するにはどうすればよいですか?

25
jMyles

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")
53

これは実際のオブジェクトインスタンスから取得できます。これは私にとってはうまくいきました。

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/

12
Lior Boord

ContentTypesにクエリを実行せずに、実際に情報を取得できます

これをモデルクラスに追加するだけです。

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