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?

23
demandé sur jMyles 2011-03-04 20:39:15

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")
49
répondu Yuji 'Tomita' Tomita 2015-12-10 04:12:40

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/

10
répondu Lior Boord 2012-11-28 13:37:46

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,))
9
répondu bformet 2015-06-02 14:54:44