2017-02-08 3 views
5

Ich möchte ein Modell serialisieren und zusätzliche Feld hinzufügen. Ich möchte diesen Serializer für Listen, Details und Ansichten verwenden. Im Serialisierer verwende ich die Methoden create, update und get_field, um die Logik anzupassen.Django Rest Framework extra Serializer Feld mit get und Post

class ExampleSerializer(serializers.ModelSerializer): 
    field = serializers.CharField() 

    class Meta: 
     model = Example 
     fields = ("field", ...) 

Wenn ich hinzufügen neues Objekt alles korrekt ist (I benutzerdefinierte Feld Datenvalidierung kann), aber wenn ich Objekt bekommen, ‚Feld‘ tun existiert nicht in der Antwort.

EDIT: Ich möchte benutzerdefinierte Methode auf Serializer-Klasse, Feld zu erhalten. Dies ist eine bessere logische Lösung für mich, dann legen Sie die benutzerdefinierte Methode für das Modell fest.

Warum ist das so? Gibt es eine bessere Lösung dafür (ich möchte nicht SerializerMethodField verwenden)?

Antwort

1

Das Feld ist nicht Teil des Modells, daher kommt der Fehler. Sie können dieses Feld write_only = True machen. Das Feld ist ein zusätzliches Feld.

oder Sie können den Quellwert dem Feld Cross Teiche zu welchem ​​Feld geben.

  1. Wir können die Eigenschaftsmethode mit diesem Feldnamen definieren. Sie können dieses Feld in der Serializer sind als nur alle Daten lesen Sie für die

    class Example(model.MOdels): 
        @property 
        def field(self): 
        return #whatever you want to return 
    
  2. Sie verwenden können serilizermethod Feld zurückkehren kann.

    class ExampleSerializer(serializers.ModelSerializer): 
        field = serializers.serializerMethod() 
    
        class Meta: 
         model = Example 
         fields = ("field", ...) 
         def get_field(self, obj): 
          return obj.data 
    
+0

Wenn ich hinzufügen Quellattribut auf dem Feld muss ich benutzerdefinierte Methode auf Modell. Ich möchte verwenden Sie die Methode auf Serializer-Klasse. Das ist eine bessere Logik für mich. Ist das möglich? – SmoQ

+0

Sie müssen nur Quell-Argument in diesem Feld im String-Format geben. –

Verwandte Themen