私はタイトルが馬鹿に聞こえるが、私のUser
インスタンスのGroup
オブジェクトへの参照を変更できるようにしたいと考えています。しかし、私は彼らが新しいグループを作成したり、既存のグループを編集したりすることはできません。私が望むのは、読み取り専用のネストされたフィールドだと思います。しかし、私がread_only=True
に設定した場合、私はシリアライザのデータの検証データを取得しません。 read_only=False
に設定すると、参照を変更するだけでなく、新しいGroup
を作成しようとします。DRFの読み取り専用のネストされたフィールドを変更
class GroupSerializer(serializers.ModelSerializer):
permissions = PermissionSerializer(many=True)
class Meta:
model = Group
fields = (
'pk',
'name',
'permissions',
)
class UserSerializer(serializers.ModelSerializer):
groups = GroupSerializer(many=True)
....
class Meta:
model = User
exclude = (
....
)
def update(self, instance, validated_data):
print(validated_data)
return instance
def validate_groups(self, value):
print("validating groups")
....
return value
read_only=True
とは何も起こりません。私はPATCH
リクエストでユーザーを元に戻しますが、ユーザーはまったく同じです。 read_only=False
で、私は、私もGroupSerializer
でなく、変更なしでcreate
とupdate
メソッドをオーバーライドしようとしている{'groups': [{'name': ['group with this name already exists.']}]}
検証エラーが私に戻って取得します。
ほとんどの場合、GroupSerializer
は、データのグループが存在することを検証するだけです。
これはhttp://stackoverflow.com/questions/38438167/unique-validation-on-nested-serializer-on-django-rest-framework/と同じです。 – Linovia