2016-07-06 10 views
1

Ich habe einen Empfangs Serializer:Teilen Serializer Django Rest Rahmen

{ 
    "suggestions": [ 
     { 
     "description": "Portugal - Porto",  
     "integration_data": { 
     ....... 
     } 
     }, 
    { 
     "description": "Portugal - Porto", 
     "another_data":{ 
     ....... 
     } 
    }] 
} 

Wie kann ich meine Serializer tun machen so etwas wie: wenn integration_data ist nicht Null gehen X zu funktionieren, wo ich mit aller Logik der Arbeit wird Serializer wenn another_data ist nicht Null gehen Sie zu Funktion Y, wo ich mit allen Logik des Serialisierer arbeiten werde.

mein Serializer Im Moment wird wie folgt geschrieben:

class SuggestionSerializer(serializers.HyperlinkedModelSerializer): 
    integration_data = serializers.DictField(write_only=True, allow_null=True, required=False) 
    sponsor_data = serializers.DictField(write_only=True, allow_null=True, required=False) 

Dank

Antwort

0

klingt wie Sie eine serializer method field verwenden möchten. Etwas wie

class SuggestionSerializer(serializers.HyperlinkedModelSerializer): 
    integration_data = = serializers.SerializerMethodField() 
    ... 
    def get_integration_data(self, obj): 
     # Insert logic for generating value of this field here 
     ... 
     return value 

Dies ermöglicht es Ihnen, den Wert des Feldes basierend auf Logik und nicht Daten willkürlich zu generieren.

+0

SerializerMethodFields sind schreibgeschützt und ich glaube, der Autor scheint beschreibbare Felder zu wünschen. –

+0

Ja, sie sind schreibgeschützt - denken Sie, dass der Autor der Frage die Daten mit einer Funktion vor dem Speichern verarbeiten will ...? Nicht ganz sicher, was die Frage ist. –

+0

Ich denke ja, aber ich denke nicht, dass sie nicht Modellfeldern entsprechen. Vielleicht nur eine benutzerdefinierte erstellen ... –