Pour un modèle django, Comment puis-je obtenir l'URL d'administration django pour ajouter un autre, ou lister des objets, etc.?
Autant Que j'aime la documentation de django, la section sur les favoris dans l'admin est étrangement vague.
Ma question Est la suivante: si je suis dans une vue et que j'ai un modèle django (ou, dans certains cas, un objet réel), Comment puis-je accéder aux pages d'administration pertinentes pour ce modèle (ou cet objet)? Si j'ai l'objet coconut_transportation.avaler.objet.all () [34], Comment puis-je passer directement à la page d'administration pour éditer cette hirondelle particulière?
De même, comment puis-je obtenir L'URL pour la page d'administration pour ajouter une autre hirondelle?
3 réponses
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")
Vous pouvez récupérer cela à partir de l'instance d'objet réelle, cela a fonctionné pour moi:
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,))
Voir ceci: http://djangosnippets.org/snippets/1916/
Vous pouvez réellement récupérer les informations sans faire de requête à ContentTypes
Ajoutez simplement ceci à votre classe de modèle:
def get_admin_url(self):
return urlresolvers.reverse("admin:%s_%s_change" %
(self._meta.app_label, self._meta.model_name), args=(self.pk,))