2017-03-15 3 views
0

データベースに保存された値と異なる値を返すカスタムシリアライザフィールドを作成する方法を教えてください。例えばDRFシリアライザデータベースに保存された値と異なるフィールド戻り値

:データベースは、現在値['alpha', 'bravo', 'delta']

  • を持って

    • ['alpha', 'delta', 'E']
    • フィールドがデータベースに['alpha', 'delta', 'echo']を保存し、'bravo'
    • フィールド上削除機能を実行する必要があります値で更新されます必要があります201レスポンスで['alpha', 'delta', {'foo': 'E', 'bar': 'echo'}]を返します(ただし、200レスポンスではありません)

    基本的に、私はカスタムフィールドでの方法を探しています私は2つの入力(要求からデータベースから)と2つの出力(データベースへとレスポンスへの)と私のロジックを記述することができます

  • 答えて

    0

    あなたはDRFをチェックする必要がありますdocumentation on custom fields

    前述のように、カスタムオブジェクトを返すには、.to_representation()メソッドを定義する必要があります。ドキュメントから

    例:

    class ClassNameField(serializers.Field): 
    def get_attribute(self, obj): 
        # We pass the object instance onto `to_representation`, 
        # not just the field attribute. 
        return obj 
    
    def to_representation(self, obj): 
        """ 
        Serialize the object's class name. 
        """ 
        return obj.__class__.__name__ 
    
    +0

    それは表現がどうあるべきかを決定するためにobj' 'に加えて、入力値にアクセスするために必要です。 – dtgq

    関連する問題