Ich habe ein Modell A mit einem ForeignKey zu einem Modell B. Wie kann ich in Django-Admin auf der Admin-Seite von Modell A neben dem Feld ForeignKey einen Link hinzufügen, der die Admin-Seite von Modell B öffnet?
Antworten:
26 für die Antwort № 1Sie können Folgendes tun:
models.py (Beispiel):
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
Ersetzen Sie Ihre App durch den Namen Ihrer App.
11 für die Antwort № 2
Neben der akzeptierten Antwort, in neueren Versionen von Django (1.10, 1.11 und 2.0), die umkehren Methode ist jetzt im Paket django.urls (vgl. dieser Link).
Darüber hinaus müssen Sie die verwenden format_html Methode zur Ausgabe von HTML im Admin. Also die allow_tags nutzlos werden
Um einen Link zur Bearbeitungsseite eines Benutzers hinzuzufügen, habe ich folgende Funktion in 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"