当前位置: 首页 > news >正文

Django序列化器中is_valid和validate

今天上班的时候分配了一个任务,是修复前端的一个提示优化,如下图所示:

按照以往的经验我以为可以直接在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(f"CCM名称长度不能超过64个字符")if len(identification) > self.Meta.model._meta.get_field('identification').max_length:raise serializers.ValidationError(f"CCMID长度不能超过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_exception=False):initial_data = self.initial_dataif len(initial_data.get("name")) > NORMAL:raise serializers.ValidationError(f"CCM名称长度不能超过{NORMAL}字符")if len(initial_data.get("identification")) > NORMAL:raise serializers.ValidationError(f"CCM标识长度不能超过{NORMAL}字符")return super().is_valid(raise_exception)

经过修改后,在视图中调用serializer.is_valid(),就会触发该重写的方法,效果如下:

http://www.lryc.cn/news/359879.html

相关文章:

  • 关于Golang中自定义包的简单使用-Go Mod
  • Dijkstra求最短路篇二(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)
  • Dijkstra求最短路篇一(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)
  • 计算机组成原理06:浮点数运算
  • opencascade 快速显示AIS_ConnectedInteractive源码学习
  • CentOS系统上安装单机版Redis教程
  • 纯Java实现Google地图的KMZ和KML文件的解析
  • k8s自定义资源你会创建吗
  • CATIA二次开发VBA入门(4)——进程外开发环境搭建,vb.net在Visual Studio中开发,创建圆柱曲面的宏录制到二次开发案例
  • c++字符串相关接口
  • Maven打包错误:无效的源发行版:17
  • 【环境栏Composer】Composer常见问题(持续更新)
  • 塑造更智慧的AI:策略与路径探索
  • 软设之快速排序
  • 从零学算法2965
  • 【Mac版】Java生成二维码
  • ROS2自定义服务接口
  • linux /www/server/cron内log文件占用空间过大,/www/server/cron是什么内容,/www/server/cron是否可以删除
  • C++青少年简明教程:break语句、continue语句
  • MySQL实战行转列(或称为PIVOT)实战sales的表记录了不同产品在不同月份的销售情况,进行输出
  • 牛客NC164 最长上升子序列(二)【困难 贪心+二分 Java/Go/PHP/C++】
  • 电子烟开发【恒压、恒有效算法】
  • 基于Open3D的点云处理22-非阻塞可视化/动态可视化
  • C++面试题其一
  • CentOS7某天的samba服务搭建操作记录(还没成功)
  • Qt Demo:基于TCP协议的视频传输Demo
  • 内存管理【C++】
  • D3D 顶点格式学习
  • gmssl vs2010编译
  • 容器化部署gitlab、jenkins,jenkins应用示例