ils*_*005 6 django django-rest-framework
我想对我的序列化程序执行部分更新.问题是我在对象级别进行了一些验证.所以is_valid()调用总是失败,我无法保存更新的序列化程序.我可以以某种方式阻止对部分更新的对象级别验证吗?这里有一个代码示例:
class ModelSerializer(serializers.ModelSerializer)
class Meta:
model = A
fields = ('field_b','field_b')
def validate(self,attrs):
if attrs.get('field_a') <= attrs.get('field_b'):
raise serializers.ValidationError('Error')
Run Code Online (Sandbox Code Playgroud)
在我的视图中部分更新方法:
class ModelViewSet(viewsets.ModelViewSet):
def partial_update(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.serialize(instance, data=request.data, partial=True)
serializer.is_valid(raise_exception=True)
new_instance = serializer.save()
return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)
问题是我不能在没有'field_b'的情况下更新'field_a'.谢谢你的帮助!
self.instance是如何访问验证器中的实例.以下是汤姆答案的主旨:
def validate_my_field(self, value):
""" Can't modify field's value after initial save """
if self.instance and self.instance.my_field != value:
raise serializers.ValidationError("changing my_field not allowed")
return value
Run Code Online (Sandbox Code Playgroud)