Eine Eins-zu-viele-Beziehung buchen

8

Ich versuche eine API für mein Django-Modell über das Django-REST-Framework bereitzustellen.

Ich habe ein Objekt Observation . Eine Beobachtung kann mehrere Dinge enthalten, die beobachtet wurden. Also habe ich es so dargestellt:

%Vor%

Wie ich verstehe, ist das eine Eins-zu-viele-Beziehung.

Ich habe jetzt eine API-Ansicht:

%Vor%

und der entsprechende Serialiser:

%Vor%

Was muss ich tun, um eine Beobachtung mit mehreren gefundenen Dingen POSTIEREN zu können? Ich kann es nicht herausfinden. Vielen Dank.

    
gozzilli 04.03.2013, 13:41
quelle

3 Antworten

8

(Antwort mehr oder weniger kopiert von einem anderen ähnliche, aber weniger klare Frage )

Um mehrere verwandte Objekte in einem einzigen POST zu erstellen, sind schreibbare geschachtelte Serialisierer erforderlich, die noch nicht verfügbar sind.

Volle Unterstützung ist ein Work in Progress , aber in der Zwischenzeit ein (Hacky) Lösung ist, die Methode create in der Ansicht in jedem Fall zu überschreiben:

%Vor%

Wahrscheinlich nicht ideal, aber es funktioniert für mich, bis der richtige Weg kommt.

Die andere Option besteht darin, die zugehörigen Observation -Objekte einzeln mit separaten POSTs zu erstellen und PrimaryKeyRelatedField zu verwenden oder HyperlinkedRelatedField , um die Verknüpfungen im letzten ObservedThing POST zu erstellen.

    
Rob Agar 05.03.2013, 10:18
quelle
4

Ich weiß, dass dieser Thread bereits eine Antwort hat, aber ich habe angefangen, an der Lösung dieses Problems zu arbeiten, und da dieser Beitrag eine meiner Inspirationen war, möchte ich meine endgültige Lösung teilen. Es kann für jemanden nützlich sein. Ich habe die Modelle, also die Elternklasse:

%Vor%

dann, die Kindklasse:

%Vor%

Ich musste die Serialisierer definieren, da ich keine Router-zugängliche URL erstellen wollte, um Children-Objekte direkt zu verwalten, aber ich wollte sie über das ModelViewSet des übergeordneten ModelViewSet erzeugen, das benötigte ich:

%Vor%

Ich war dann bereit, das ModelViewSet zu erstellen, indem ich die Create / Update-Mixins überschrieb oder erweiterte und es generisch machte, um es für andere Fälle wiederzuverwenden:

%Vor%

So kann ich es für jeden geschachtelten Beziehungsfall, den ich in meiner App habe, wie folgt wiederverwenden:

%Vor%

Und am Ende das Routing:

%Vor%

Es funktioniert wie ein Zauber!

    
gigaDIE 22.05.2014 15:19
quelle
1
%Vor%

Sie müssen die Beziehung "Viele zu Viele" verwenden, um eine temporäre Tabelle zu erstellen, in der die Schlüssel gespeichert und Daten automatisch zugeordnet werden.

    
Mayank Saxena 05.03.2013 07:20
quelle