Django/REST:在对象级验证期间支持部分更新吗?

the*_*0ID 5 django django-views django-rest-framework

可以说,我有一个执行对象级验证的序列化程序:

class AnimalSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Animal
        fields = ('id', 'type', 'feathers')

    def validate(self, data):
        if data['type'] != 'bird' and data['feathers'] != null:
            raise ValidationError({'feathers': 'Only supported by birds!'})
        return data
Run Code Online (Sandbox Code Playgroud)

支持部分更新的最佳方式是什么,即使用patch方法的REST 请求?

我天真的方法是手工完成:

    def validate(self, data):
        data['type'] = data.get('type') or self.instance.type
        data['feathers'] = data.get('feathers') or self.instance.feathers
        if data['type'] != 'bird' and data['feathers'] != null:
            raise ValidationError({'feathers': 'Only supported by birds!'})
        return data
Run Code Online (Sandbox Code Playgroud)

但我认为这非常混乱且容易出错。有没有更优雅的解决方案?


更新:看起来这需要一些澄清。我要求在对象级验证期间(即在方法内)支持部分更新的良好实践。我不问如何这部分更新。我知道validate