让我们说,我有一个执行对象级验证的序列化程序:
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
支持部分更新的最佳方式是什么,即使用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
但我认为这很混乱且容易出错。还有更优雅的解决方案吗?
更新:看起来这需要一些澄清。我要求在对象级验证期间支持部分更新,即validate
方法内的良好做法。我没有询问如何做部分更新。我知道那个!