Lien dans django admin vers l'objet clé étranger
j'ai un modèle A avec une clé étrangère à un modèle B. Dans Django admin, Comment puis-je ajouter un lien dans la page admin du model A à côté du champ ForeignKey qui ouvre la page admin du model B ?
17
demandé sur
Laurent
2015-03-03 16:21:06
2 réponses
Vous pouvez effectuer les opérations suivantes:
models.py (exemple):
model B(models.Model):
name = models.CharField(max_length=20)
model A(models.Model):
field1 = models.CharField(max_length=20)
Bkey = models.ForeignKey(B)
admin.py
from django.core import urlresolvers
class AAdmin(admin.ModelAdmin):
list_display = ["field1","link_to_B"]
def link_to_B(self, obj):
link=urlresolvers.reverse("admin:yourapp_b_change", args=[obj.B.id]) #model name has to be lowercase
return u'<a href="%s">%s</a>' % (link,obj.B.name)
link_to_B.allow_tags=True
remplacer yourrapp par le nom de votre application.
27
répondu
ger.s.brett
2016-06-05 05:49:07
en plus de la réponse acceptée, dans les nouvelles versions de Django (1.10, 1.11 et 2.0), le inverse méthode est maintenant dans le paquet django.url(cf. ce lien).
de plus, vous devez utiliser le format_html méthode de sortie HTML dans l'admin. Si le allow_tags devenir inutile.
Enfin, pour ajouter un lien vers la page d'édition d'un utilisateur, j'ai cette fonction dans admin.py:
from django.urls import reverse
from django.utils.html import format_html
class ObjectAdmin(admin.ModelAdmin):
list_display = ('name', 'link_to_user')
def link_to_user(self, obj):
link = reverse("admin:auth_user_change", args=[obj.user.id])
return format_html('<a href="{}">Edit {}</a>', link, obj.user.username)
link_to_user.short_description = 'Edit user'
15
répondu
Benbb96
2018-03-16 14:04:31