django Rest Framework abstrakte Klasse Serialisierer

8

Ich habe einige Modelle wie diese:

%Vor%

Damit möchte ich nur einen Serializer erstellen, der alle diese Feldtypen enthält (Serialisierung, Deserialisierung, Aktualisierung und Speicherung).

Um genauer zu sein, möchte ich nur einen Serialisierer (TypeBaseSerializer), der das Dropdown auf der Benutzeroberfläche druckt, die JSON-Antwort serialisiert, es bei Post deserialisiert und für alle meine Basistypen speichert.

In etwa so:

%Vor%

Ist es möglich?

    
Tiago Framesqui 14.10.2015, 23:07
quelle

3 Antworten

7

Sie können nicht verwenden ModelSerializer mit einem abstrakten Basismodell. Von restframework.serializers:

%Vor%

Ich schrieb eine serializer_factory-Funktion für ein ähnliches Problem:

%Vor%

Sie können dann das Werk verwenden, um Serialisierer nach Bedarf zu erstellen:

%Vor%

Aktivieren Sie jetzt verschiedene Unterklassen-Serialisierer:

%Vor%     
Sebastian Wozny 14.10.2015 23:44
quelle
2

Ich denke, der folgende Ansatz ist sauberer. Sie können das Feld "abstract" für den Basis-Serializer auf true setzen und Ihre allgemeine Logik für alle untergeordneten Serializer hinzufügen.

%Vor%

Und dann erstellen Sie untergeordnete Serialisierer und verwenden Sie sie für die Datenbearbeitung.

%Vor%

Jetzt können Sie diese beiden Serializer normalerweise für jedes Modell verwenden.

Aber wenn Sie wirklich einen Serializer für beide Modelle haben möchten, dann erstellen Sie auch ein Container-Modell und einen Serializer für ihn. Das ist viel sauberer:)

    
adkl 07.11.2017 17:23
quelle
0

Nur ein bisschen über @ adkis Antwort iterieren:

  1. es ist möglich, das Modell für TypeBaseSerializer zu überspringen;
  2. abgeleitete Serializer können sich auf TypeBaseSerializer.meta.fields beziehen, so dass Sie sie an einem einzigen Ort ändern könnten.
%Vor%
    
Kostyantyn 07.12.2017 20:40
quelle