静态网站建设要学什么,搭建一个网站,app设计开发要多少钱,内网门户网站建设今天上班的时候分配了一个任务#xff0c;是修复前端的一个提示优化#xff0c;如下图所示#xff1a; 按照以往的经验我以为可以直接在validate上进行校验#xff0c;如何抛出一个异常即可 #xff0c;例如#xff1a;
class CcmSerializer(serializers.ModelSerialize…今天上班的时候分配了一个任务是修复前端的一个提示优化如下图所示 按照以往的经验我以为可以直接在validate上进行校验如何抛出一个异常即可 例如
class CcmSerializer(serializers.ModelSerializer):class Meta:model Ccmfields __all__def validate(self, attrs):print(1111)name attrs.get(name)identification attrs.get(identification)description attrs.get(description)if len(name) 64:raise serializers.ValidationError(fCCM名称长度不能超过64个字符)if len(identification) self.Meta.model._meta.get_field(identification).max_length:raise serializers.ValidationError(fCCMID长度不能超过64个字符)return attrs
但是当在视图中执行serializer.is_valid()的时候validate()函数并没有触发我非常疑惑于是乎打断点进行测试最终发现validate()其实是当serializer.is_valid()返回True的并且执行serializer.save()的时候才会触发的。所以要想在校验字段的时候抛出自定义的异常信息就需要重写is_valid()方法。如下
class CcmSerializer(serializers.ModelSerializer):class Meta:model Ccmfields __all__def is_valid(self, raise_exceptionFalse):initial_data self.initial_dataif len(initial_data.get(name)) NORMAL:raise serializers.ValidationError(fCCM名称长度不能超过{NORMAL}字符)if len(initial_data.get(identification)) NORMAL:raise serializers.ValidationError(fCCM标识长度不能超过{NORMAL}字符)return super().is_valid(raise_exception)经过修改后在视图中调用serializer.is_valid()就会触发该重写的方法效果如下