Django Rest Framework 3.0: Speichern von geschachtelten Mehr-zu-eins-Beziehungen

8

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:

%Vor%

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?

    
Julio 31.12.2014, 05:08
quelle

1 Antwort

5

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.

%Vor%

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.

    
Kevin Brown 02.01.2015, 00:07
quelle