Ich versuche eine verschachtelte Beziehung mit Django Rest Framework 3.0 zu erstellen. Ich habe meine Serializer erstellt und versucht, die Funktion create()
zu überschreiben. Meine Modelle sind wie folgt definiert:
Wie Sie feststellen werden, kann ich mehrere Preise für meine Artikel haben. Meine Serialisierer sind wie folgt definiert:
%Vor%Wenn ich versuche, einen neuen Gegenstand zu POSTIEREN:
%Vor%Ich erhalte den folgenden Fehler:
%Vor% Vermutlich, weil der Preis-Serializer keine Ahnung hat, welche ID der neue Artikel hat. Ich habe versucht, diese Funktionalität in der Funktion create()
meines Serialisierers zu überschreiben, aber es scheint, als ob die Validierung des Serialisierers getroffen wird, bevor ich die Möglichkeit habe, das Element zu erstellen und es mit dem Preis zu verknüpfen.
Also - Wie erstelle ich einen neuen Artikel, erhalte die Artikel-ID und erstelle dann die neuen Preise?
Das Problem ist, dass Ihr PriceSerializer
nach dem Schlüssel item
sucht, weil er im Modell Price
angegeben ist. Dies ist nicht sofort offensichtlich, da Sie Meta.exclude
anstelle von Meta.fields
verwenden.
Ist das Gleiche wie das Schreiben
%Vor% Was deutlich macht, was Ihr Problem ist. Da das item
-Feld im Modell nicht empty=True
(oder null=True
) enthält, wird Django REST Framework automatisch generiert es als PrimaryKeyRelatedField
mit required=True
. Aus diesem Grund erhalten Sie den Fehler This field is required
erforderlich, da Django REST Framework nicht automatisch erkennen kann, dass er von einem übergeordneten Serialisierungsprogramm stammt, das dieses Feld bereits enthält.
Sie können dies umgehen, indem Sie das Feld aus dem Serializer entfernen, da es scheinbar nie benötigt wird.
%Vor% Dies zeigt zwar nicht mehr das Feld item
an, aber ich vermute, dass dies kein Problem für Sie ist.
Tags und Links python django serialization django-rest-framework