Django REST Framework unterschiedliche Tiefe für POST / PUT?

8

Ich verwende Django REST Framework, um eine API für meine Web-App zu erstellen. Ich habe eine Klasse 'Kommentar', die depth=2 in der Klasse Meta hat. Dies funktioniert sehr gut, wenn GET in Comments ist. Wenn ich versuche, eine POST oder PUT Anfrage zu senden (d. H. Eine neue Comment erstellen), wird mir gesagt, dass ich Objekte anstelle von ForeignKey IDs einfügen muss.

Hier ist meine Serializer-Klasse:

%Vor%

Das Modell:

%Vor%

Der Ansichtscode:

%Vor%

Und der Fehler, der in der Ausgabe (JSON) angezeigt wird, ist:

%Vor%

Wenn diese Rohdaten gesendet werden:

%Vor%     
Jeremy Blalock 08.04.2013, 15:54
quelle

3 Antworten

6

Ich glaube, der richtige Weg, um ein Serializer-Feld zu definieren, das sich auf eine Fremdschlüsselbeziehung bezieht, ist etwas wie serializers.PrimaryKeyRelatedField . Ich glaube nicht, dass Model-Serializer diese Feldklasse automatisch verwenden, ohne sie explizit in der Serializer-Klasse zu definieren.

Ссылка

Ich würde mir vorstellen, dass ein PrimaryKeyRelatedField Serializer JSON-Datenübertragungen, wie sie in Ihrem Beispiel verwendet wurden, korrekt behandelt.

    
David Sanders 13.07.2013 02:51
quelle
6

Ich weiß, das ist ein bisschen spät, aber ich habe am Ende 2 Serialisierer verwendet:

%Vor%

Dann wie folgt verwendet:

%Vor%     
Robin Elvin 04.11.2014 17:13
quelle
1

Sie können verschiedene Serializer setzen, indem Sie die Funktion get_serializer_class() wie folgt überschreiben:

def get_serializer_class(self): method = self.request.method if method == 'PUT' or method == 'POST': return YourWriteSerializer else: return YourReadSerializer

Ich dachte daran, diesen hier hinzuzufügen, da ich nach einiger Zeit vom Googling hierher kam.

    
Kermet 08.08.2017 12:49
quelle