Для модели django, как я могу получить URL администратора django для добавления другого, или список объектов и т. Д.? - PullRequest
24 голосов
/ 04 марта 2011

Как бы мне не понравилась документация по django, раздел о букмарклетах в админке странно расплывчат.

У меня такой вопрос: если у меня видение иМодель Django (или, в некоторых случаях, фактический объект), как я могу получить на соответствующих страницах администратора для этой модели (или объекта)?Если у меня есть объект coconut_transproduction.swallow.objects.all () [34], как я могу перейти прямо на страницу администратора, чтобы отредактировать эту конкретную ласточку?

Точно так же, как я могу получить URL для страницы администратора, чтобы добавить еще одну ласточку?

Ответы [ 3 ]

49 голосов
/ 04 марта 2011

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")
12 голосов
/ 28 ноября 2012

Вы можете получить это из фактического экземпляра объекта, это сработало для меня:

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/

9 голосов
/ 20 марта 2015

Вы можете получить информацию, не отправляя запрос к ContentTypes

Просто добавьте это в класс вашей модели:

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