Django REST シリアライザー メソッド 書き込み可能フィールド 質問する

Django REST シリアライザー メソッド 書き込み可能フィールド 質問する

私はDjango RESTフレームワークについて読んでいて、ゲッターを使用してシリアル化されたモデルを持っています。シリアライザメソッドフィールド()

ただし、このエンドポイントに POST するときに、このフィールドも設定できるようにしたいのですが、上記のドキュメントに示されているように、SerializerMethodField に書き込むことができないため、機能しません。Django REST で、カスタム getter メソッドとカスタム setter メソッドを定義するシリアライザー フィールドを持つ方法はありますか?

編集: これが私がやろうとしていることのソースです。クライアントはユーザーと 1 対 1 の関係にあります。

class ClientSerializer(serializers.ModelSerializer):
    email = serializers.SerializerMethodField()

    def create(self, validated_data):
        email = validated_data.get("email", None) # This doesn't work because email isn't passed into validated_data because it's a readonly field
        # create the client and associated user here


    def get_email(self, obj):
        return obj.user.email

    class Meta:
        model = Client
        fields = (
            "id",
            "email",
        )

ベストアンサー1

読み取り/書き込みシリアライザー メソッド フィールドを次に示します。

class ReadWriteSerializerMethodField(serializers.SerializerMethodField):
    def __init__(self, method_name=None, **kwargs):
        self.method_name = method_name
        kwargs['source'] = '*'
        super(serializers.SerializerMethodField, self).__init__(**kwargs)

    def to_internal_value(self, data):
        return {self.field_name: data}

おすすめ記事