私は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}