/ / Link im Django-Admin zu einem Fremdschlüsselobjekt - Django, Django-Admin, Fremdschlüssel-Beziehung

Link in django admin zum Fremdschlüsselobjekt - django, django-admin, Fremdschlüsselbeziehung

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 № 1

Sie 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"