Для модели django, как я могу получить URL-адрес администратора django для добавления другого или списка объектов и т.д.?
Насколько мне нравится документация django, раздел в закладках в admin странно расплывчато.
Мой вопрос таков: если у меня есть представление, и у меня есть модель django (или, в некоторых случаях, фактический объект), как я могу добраться до соответствующих страниц администрирования для этой модели (или объекта)? Если у меня есть объект coconut_transportation.swallow.objects.all() [34], как я могу перейти прямо к странице администратора, чтобы отредактировать эту конкретную ласточку?
Аналогично, как я могу получить URL-адрес страницы администратора, чтобы добавить еще одну ласточку?
Ответы
Ответ 1
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")
Ответ 2
Вы можете получить это из фактического экземпляра объекта, это сработало для меня:
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/
Ответ 3
Фактически вы можете получить информацию без запроса в ContentTypes
Просто добавьте это в свой класс модели:
def get_admin_url(self):
return urlresolvers.reverse("admin:%s_%s_change" %
(self._meta.app_label, self._meta.model_name), args=(self.pk,))