Beim Verwenden von Django-REST-Framework kann ich ausgewählte Felder in einem verschachtelten serialisierten Objekt nicht anzeigen.
Ich kann das gesamte Address
-Modell korrekt serialisieren, aber ich möchte nur ein paar Felder von Address
, die in meinem serialisierten Outlet
verschachtelt sind. Es gibt ein
Habe AttributeError erhalten, als ich versuchte, einen Wert für das Feld
outlet_address
auf dem SerializerOutletSerializer
zu erhalten. Das Serializer-Feld wurde möglicherweise falsch benannt und entspricht keinem Attribut oder Schlüssel in derOutlet
-Instanz. Ursprünglicher Ausnahmetext war: 'Outlet' Objekt hat kein Attribut 'outlet_address'.
api_v1 / models.py
%Vor%api_v1 / serializers.py
%Vor%An dieser Stelle ist es nicht möglich, das outlet_address-Attribut im Outlet-Modell zu finden, während ich erwarte, dass es im Serializer möglich sein sollte.
Habe AttributeError bekommen, als ich versuchte einen Wert für das Feld zu bekommen
outlet_address
auf dem SerializerOutletSerializer
. Der Serializer Das Feld könnte falsch benannt sein und keinem Attribut oder Schlüssel entsprechen dieOutlet
-Instanz. Ursprünglicher Ausnahmetext war: "Outlet" -Objekt hat kein Attribut 'outlet_address'.
Wie in anderen Antworten beschrieben, habe ich versucht:
many=
zum ModelSerializer related_name=
zu allen Modellen Versuchen Sie Folgendes:
%Vor%Der Grund, warum ich die obigen Änderungen vornehmen würde, ist, dass das Outlet-Modell kein Attribut namens "outlet_address" hat, sondern ein Attribut namens "address".
Siehe hier für ein ähnliches Problem: Django Rest Framework hält Fehler bei geschachtelter Beziehung zurückgegeben
Zusätzlich zu den anderen Antworten möchte ich Folgendes hinzufügen, falls jemand auch hier landet.
Bei der verschachtelten Serialisierung muss der Feldname in den Modellfeldern stehen, damit er funktioniert.
Falls wir eine umgekehrte Beziehung brauchen, dann natürlich dort wird kein solches Feld in den Modellfeldern sein.
Zum Beispiel würde dies bei den bestimmten Modellen in der Frage passieren, wenn wir alle Ausgänge im Adress-Serializer referenzieren müssten.
Daher müssen wir: (a) Entweder einen related_name
für den Fremdschlüssel des anderen Modells angeben. An dieser Stelle würden wir outlet_address
verwenden, da dies der verwandte Name des Adressfelds im Outlet-Modell ist.
Oder (b) Wenn kein verwandter Name verwendet wird, verwenden Sie den standardmäßigen Django-Namen, indem Sie _set
an den Modellnamen anhängen (z. B. outlet_set
.
Tags und Links python django serialization django-rest-framework