2017-02-08 10 views
5

私はモデルをシリアル化し、余分なフィールドを含める。私はこのシリアライザをリスト、ディテールに使用し、ビューを作成したい。シリアライザでは、ロジックのカスタマイズにcreate、update、およびget_fieldメソッドを使用します。Django rest framework余分なシリアライザフィールドgetとpost

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

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

私は新しいオブジェクトを追加すると、すべてが(私はカスタムフィールドデータを検証することができます)が正しいですが、私は、オブジェクトを取得するときに、「フィールド」は、応答に存在しません。

EDIT:フィールドを取得するシリアライザクラスのカスタムメソッドを設定します。これは私のためのより良いロジックソリューションですし、モデルのカスタムメソッドを設定します。

なぜそれはそうですか?私はSerializerMethodFieldを使いたくありません。

答えて

1

このフィールドは、エラーが発生しているため、モデルの一部ではありません。そのフィールドをwrite_only = Trueにすることができます。フィールドは余分なフィールドです。

ソース値にはどのフィールドにフィールドクロスポンドを付けることができます。

  1. フィールド名でプロパティメソッドを定義できます。あなたはserilizermethodフィールドを使用できるよう

    class Example(model.MOdels): 
        @property 
        def field(self): 
        return #whatever you want to return 
    
  2. のために返すことができるだけで任意のデータを読み取るのようにして、シリアライザにそのフィールドを含めることができます。

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

私は、フィールド上のソース属性を追加すると、私はモデルのカスタムメソッドを持っている必要があります。シリアライザクラスでの使用方法が必要です。それは私のためのよりよい論理です。それは可能ですか? – SmoQ

+0

あなたはそのフィールドに文字列形式のsource引数を与えなければなりません。 –

関連する問題