Django序列化器中validate没起作用?validate的触发时机

news2024/11/18 11:31:02

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

按照以往的经验我以为可以直接在validate上进行校验,如何抛出一个异常即可 ,例如:

class CcmSerializer(serializers.ModelSerializer):

    class Meta:
        model = Ccm
        fields = "__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 = Ccm
        fields = "__all__"

    def is_valid(self, raise_exception=False):
        initial_data = self.initial_data
        if 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.coloradmin.cn/o/1713261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

划重点来了,计算机组成原理之计算机存储介绍与汉明码纠错

存储器 1. 分类 (1)按存储介质分类: 存储介质是能寄存”0“或"1"两种代码的物质或元器件。 包括半导体器件,磁性材料,光盘等。 半导体存储器:半导体器件组成的存储器。断电后数据会丢失&…

关于Word目录的更新

左侧标题顺序如有调整,自动目录并不会同步更新,每次都要记得在正文目录左上角点击更新目录

【Linux终端探险】:从入门到熟练,玩转基础命令的秘密(一)

文章目录 🚀Linux基础命令⭐1. 查看目录命令💥2. 切换目录👊3. 创建目录❤️4. 删除目录/文件🚲5. 修改目录/文件🌈6. 拷贝目录/文件 🚀Linux基础命令 ⭐1. 查看目录命令 在Linux中,查看目录的…

【Paddle】Inplace相关问题:反向传播、影响内存使用和性能

【Paddle】Inplace相关问题:反向传播、影响内存使用和性能 写在最前面inplace 的好处有哪些?能降低计算复杂度吗在反向传播时,Inplace为什么会阻碍呢?“计算图的完整性受损”表达有误原地操作 sin_()为什么原地操作会阻碍反向传播…

【AIGC】GPT-4o技术分析-浅谈

GPT-4o:人工智能技术的全新里程碑 一、引言二、GPT系列版本间的对比分析三、GPT-4o的技术能力分析多模态处理能力速度与性能优化情感理解与表达能力 四、个人整体感受五、结语 一、引言 在人工智能技术的浪潮中,OpenAI再次以其卓越的创新能力引领潮流。近…

Java基础:面向对象(二)

Java基础:面向对象(二) 文章目录 Java基础:面向对象(二)1. 面向对象编程思想2. 类与对象2.1 类2.1.1 类的定义2.1.2 成员变量2.1.3 局部变量 2.2 对象2.2.1 对象的定义2.2.2 对象的使用2.2.3 对象创建的原理…

灯下黑”挖出国内知名安全平台某BUF的CSRF漏洞

漏洞复现: 漏洞点在删除文章的地方,首先为了测试先发布一篇文章 发布之后我们可以查看文章,注意url中的一串数字,就是这篇文章的id,如下如: 这里的文章id是“271825”,首先抓一下删除文章的数据…

装机数台,依旧还会心念i5-12600KF的性能和性价比优势:

近几个月的时间中, 装机差不多4台电脑,由于工作需要,计划年中再增添一台。 目前市场上英特尔CPU促销非常火爆,第12代、第13代以及第14代的产品在年中有适当的优惠。 年中也是装机的旺季,各种相关配件也相对便宜一些。…

新版IDEA没有办法选择Java8版本解决方法

2023年11月27日后,spring.io 默认不再支持创建jdk1.8的项目 解决方法就是把 Spring的Server URL 改为阿里的。 阿里的Server URL https://start.aliyun.com/ 默认的Server URL https://start.spring.io 阿里的Server URL https://start.aliyun.com/

如何使用宝塔面板搭建Tipask问答社区网站并发布公网远程访问

文章目录 前言1.Tipask网站搭建1.1 Tipask网站下载和安装1.2 Tipask网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3 Cpolar稳定隧道(本地设置) 3. 公网访问测试4.结语 前…

基于react native的图片放大旋转效果二

基于react native的图片放大旋转效果二 const TaskReceiveModal ({ onClick }) > {const spinValue useRef(new Animated.Value(0)).current;const scaleValue useRef(new Animated.Value(0)).current;const spinAnimation useRef(null);const spin spinValue.interpol…

【YOLOv10的使用】YOLOv10的训练/验证/预测/导出模型/ONNX模型的使用

🚀🚀🚀 YOLOv10: 实时端到端的目标检测 性能 YOLOv10比最先进的YOLOv9延迟时间更低,测试结果可以与YOLOv9媲美,可能会成为YOLO系列模型部署的“新选择”。 目录 1 安装 2 训练 3 验证 4 预测 5 导出模型 6 ONNX…

股价飙升:AI PC大变革,联想的“联想时刻”正在缔造?

按照产业的传导逻辑,在颠覆式技术到来之时,当引发这场变革的最核心技术及产品真正进入了产品化、商业化阶段,此时直触需求端的终端厂商,其成长性估算将得到市场的重新预估。 眼下AI PC之于联想就是如此。 5月27日,联…

使用 CNN 训练自己的数据集

CNN(练习数据集) 1.导包:2.导入数据集:3. 使用image_dataset_from_directory()将数据加载tf.data.Dataset中:4. 查看数据集中的一部分图像,以及它们对应的标签:5.迭代数据集 train_ds&#xff0…

高维数组到向量的转换:两种方法的深度解析

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:高维数组的挑战与需求 二、方法一:使用NumPy库进行展平 示…

HTML+CSS 圆形菜单

效果演示 实现了一个圆形菜单的效果,点击菜单按钮后,菜单项会从菜单按钮中心点向外展开,并且菜单项上有文字链接。可以将这段代码的效果称为“圆形菜单展开效果”。 Code <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8…

word 替换全部字母和数字为新罗马

步骤1&#xff0c;准备好一份测试文档 Adfafdafdafdafdsafdsafasdfdsa 汇总的时光发生的尬的算法的萨法asdfasfsafda大法师短发沙发上对方阿福的萨法的算法大法大方发达舒服打发到沙发上对方说 打发打发打发的负担啊大方阿道夫大法东方大厦发大水Ameti 1. Adafe我直打大噶特区…

Vue开发者工具安装

通过谷歌应用商店安装&#xff08;国外网站&#xff09; 极简插件下载&#xff08;推荐&#xff09;&#xff1a;下载 → 解压 → 点击左上角的三个小点 → 开发者模式 → 拖拽安装 → 插件详情允许访问文件 https://chrome.zzzmh.cn/index 安装步骤&#xff1a; 安装之后可…

集合的综合练习

自动点名器1&#xff1a;班级里有N个学生&#xff0c;实现随机点名器 public class test {public static void main(String [] args) {ArrayList<String> listnew ArrayList<>();//创建一个集合//在集合中添加元素Collections.addAll(list, "李明",&quo…

618必买的数码好物有哪些?盘点兼具设计与实用的数码好物分享

随着618购物节的到来&#xff0c;数码爱好者们又开始跃跃欲试&#xff0c;期待在这个年度大促中寻找到自己心仪的数码好物&#xff0c;在这个数字化时代&#xff0c;数码产品不仅是我们日常生活的必需品&#xff0c;更是提升生活品质的重要工具&#xff0c;那么在众多的数码产品…