完整教程:Django中的clean()方法和full_clean()方法

news/2026/1/23 8:41:25/文章来源:https://www.cnblogs.com/gccbuaa/p/19520065

前言

clean()是Django在处理数据验证时的常用方法
本博客适合那些知道clean_<filename>方法但是不知道clean()方法的学习者
full_clean()方法用于测试clean()方法的第二种用法,算是补充

clean()

此方法有两种用法,一种用于表单验证,另一种用于模型验证

1、表单验证

在表单验证中,clean()方法用于执行表单最后的验证
他们的执行顺序是这样的
在这里插入图片描述
clean()方法是"最后一道防线"
下面来说一下用法

def clean_<filename>(self):""" 其他的验证 """return data# 与其他验证同级编写def clean(self):clean_data = super().clean()"""这里执行具体的操作"""return clean_data

此处super().clean()得到的是一个已经经过校验的字典

因为clean()方法在最后执行,所以此时得到的是已经经过了前面校验的数据

那么有人可能就会问了,此时已经经过了所有的clean_<filename>方法,那么此时的cleaned_data字典与此时的super().clean()是不是一样的,答案是一样的,他们虽然调用的方式不同,但是他们所指的内存地址是一样的


已知我们在clean_<filename>中抛出raise ValidationError("错误信息")错误信息时
可以在前端中通过ModelForm对象.字段名.errors.0来渲染错误信息
像这样:

<span style="color: red;">{{ form.password.errors.0 }}</span>

类似的当clean()方法中抛出raise ValidationError("错误信息")时可以
通过.non_field_errors获取错误信息
然后
在前端中这样渲染错误信息:

<span style="color: red;">{{ form.non_field_errors.0 }}</span>

2、模型验证

在定义模型的时候如果我们想在这个阶段进行数据的验证,那就需要使用到clean()方法的第二种用法

from datetime import date
from django.core.exceptions import ValidationError
class User(models.Model):
name = models.CharField(verbose_name="姓名",max_length=128)
age = models.IntegerField(verbose_name="年龄")
birthday = models.DateField(verbose_name="生日")
# --------- 验证区域 -------------
def clean(self):
super().clean()
if self.birthday > date.today():
raise ValidationError("生日不能大于今天")

注意在这里也要调用super().clean()这样才可以
否则字段里面的验证就不会生效(max_length=128这些字段级验证就会失效)
注意用self.字段名获取字段值

此时抛出的验证错误等同于在ModelForm里面
通过raise ValidationError("")抛出的验证错误
都可以通过.non_field_errors在前端中获取


举个例子:

def clean(self):
raise ValidationError("测试错误")

此时他创建的ModelForm在前端中可以通过

<span style="color: red;">{{ form.confirm_password.errors.0 }}</span>

来获取错误


总结一下就是在模型中的clean()方法抛出的错误的获取方式就
等同于在ModelForm中的clean()方法抛出的错误
都可以通过.non_field_errors获取

full_clean()

已知通过.save()会执行你在模型里面定义的验证规则以及在ModelForm中定义的验证规则
full_clean()方法则会只执行你在models.py中定义的相关验证

举个例子就明白了
models.py

class User(models.Model):
name = models.CharField(verbose_name="姓名",max_length=128)
age = models.IntegerField(verbose_name="年龄")
birthday = models.DateField(verbose_name="生日")
def clean(self):
super().clean()
if self.birthday > date.today():
raise ValidationError("生日不能大于今天")

编写一个测试用例

admin_test = User(name="张三",age=21,birthday='2027-1-1')
try:
admin_test.full_clean()
admin_test.save()
except ValidationError as e:
for field, errors in e.message_dict.items():
print(f"{field}: {errors}")

此时控制台打印

__all__: ['生日不能大于今天']

注意:full_clean()如果通过了就什么都不会返回
但是如果没有通过验证他就会抛出raise ValidationError

.save()方法可以用于ModelForm对象保存数据到数据库
也可以用于模型对象保存数据到数据库

user = models.User.objects.create(
username='john',
email='john@example.com',
password='password123'
)
# 等价于
user_object = User(
username='john',
email='john@example.com',
password='password123'
)
user_object.save()

但是不会进行clean()验证,只会执行字段级别的验证,比如max_length=128这种验证

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1204086.shtml

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

相关文章

一键启动FSMN-VAD,开箱即用的语音检测工具

一键启动FSMN-VAD&#xff0c;开箱即用的语音检测工具 你是否曾为处理长段录音而烦恼&#xff1f;手动剪辑静音片段耗时耗力&#xff0c;自动化工具又配置复杂、依赖繁多。有没有一种方式&#xff0c;能像打开手电筒一样简单&#xff0c;点一下就精准识别出音频中每一句“真正…

输出文件在哪?/root/cv_fft_inpainting_lama目录结构说明

输出文件在哪&#xff1f;/root/cv_fft_inpainting_lama目录结构说明本文不是讲傅里叶变换原理&#xff0c;也不是教你怎么写FFT代码——而是帮你搞清楚&#xff1a;你点下“ 开始修复”之后&#xff0c;图片到底被存到哪了&#xff1f;整个项目文件夹里哪些是关键目录、哪些可…

AI绘画2025趋势实战:Z-Image-Turbo开源模型+Gradio快速上线指南

AI绘画2025趋势实战&#xff1a;Z-Image-Turbo开源模型Gradio快速上线指南 1. 为什么Z-Image-Turbo是2025年最值得上手的AI绘画模型 你有没有试过等一张图生成要一分多钟&#xff1f;或者好不容易调好参数&#xff0c;结果中文提示词直接“失语”&#xff1f;又或者显卡只有1…

黄金一直上涨,猜测跟霉国债务挂钩

目前的所有解释&#xff0c;能解释一部分&#xff0c;却无法解释为什么一直上涨。于是我提出一个猜测&#xff1a;黄金上涨是跟霉国债务挂钩。

2024年AI开发者入门必看:Llama3-8B开源模型部署全流程

2024年AI开发者入门必看&#xff1a;Llama3-8B开源模型部署全流程 1. 为什么Llama3-8B是新手最值得上手的开源大模型 如果你刚接触大模型开发&#xff0c;正纠结该从哪个模型开始练手&#xff0c;又担心显卡不够、环境太复杂、文档看不懂——那Llama3-8B很可能就是你一直在找…

Qwen3-Embedding-4B省算力方案:动态维度输出实战案例

Qwen3-Embedding-4B省算力方案&#xff1a;动态维度输出实战案例 在向量检索、RAG系统和语义搜索等实际工程场景中&#xff0c;嵌入模型的“够用就好”原则越来越被重视。高维向量虽能保留更多语义信息&#xff0c;但会显著增加存储开销、索引构建时间、相似度计算延迟&#x…

如何为不同需求选装修公司?2026年上海装修公司全面评测与推荐,直击增项与工艺痛点

摘要 在上海,家庭装修决策正日益从单纯的价格考量,转向对长期居住品质、过程透明化及服务确定性的综合权衡。面对市场上服务商层次多样、信息不对称以及“增项”、“延期”等行业痼疾,业主在选择合作伙伴时常常陷入…

rc5.d目录作用揭秘,搭配测试脚本更好懂

rc5.d目录作用揭秘&#xff0c;搭配测试脚本更好懂 你有没有遇到过这样的问题&#xff1a;写好了开机自启脚本&#xff0c;却怎么也等不到它自动运行&#xff1f;改了配置、加了权限、甚至重启了三遍&#xff0c;结果系统启动后一查进程&#xff0c;脚本压根没跑——不是脚本写…

微信联系作者,技术支持就在身边

微信联系作者&#xff0c;技术支持就在身边 1. 这不是普通抠图工具&#xff0c;而是一次“人对人”的技术交付 你有没有遇到过这样的情况&#xff1a; 下载了一个AI抠图项目&#xff0c;README里写着“pip install -r requirements.txt”&#xff0c;结果卡在PyTorch版本冲突…

2026年靠谱的焊台测试仪/测试仪品牌厂家排行榜

在工业制造和电子生产领域,焊台测试仪作为关键的质量控制设备,其性能和可靠性直接影响生产效率和产品质量。本文基于产品技术实力、市场口碑、研发投入和售后服务四个维度,对2026年值得信赖的焊台测试仪品牌厂家进行…

新消费品牌如何布局AI搜索?2026年GEO优化推荐与评价,直击场景化营销痛点

由中国领先的行业监测与权威平台《广告主评论》主办、中经总网中经在线(全称中国经济报道)、世界品牌研究院(中国)集团有限公司协办支持的“全球 GEO 厂商评测”,从 GEO 理论奠基、技术实践、创始人背景、技术资质…

AB实验的关键认知(六)分流单元与分析单元

—关注作者&#xff0c;送A/B实验实战工具包 在设计 AB 实验时&#xff0c;我们经常会遇到这样的灵魂拷问&#xff1a; “这个实验是按人 (User) 分流&#xff0c;还是按访问 (Session) 分流&#xff1f;” “我按人分流了&#xff0c;最后能不能算点击率 (CTR) 的 P 值&#x…

AB实验的关键认知(五)综合评估标准 OEC

—关注作者&#xff0c;送A/B实验实战工具包 在 AB 实验的决策会议上&#xff0c;最让人头秃、也最容易引发“撕逼”的场景往往是这样的&#xff1a; 产品经理满面红光地指着 PPT&#xff1a;“大家看&#xff0c;实验组的点击率 (CTR) 显著提升了 5%&#xff0c;P 值小于 0.0…

2026年热门的垂直式压缩垃圾站/压缩垃圾站设备行业热度TOP榜

随着城市化进程加速和环保政策趋严,垂直式压缩垃圾站/压缩垃圾站设备行业正迎来前所未有的发展机遇。本榜单基于2025-2026年行业数据,从技术创新能力、市场占有率、客户满意度、产品稳定性及售后服务五个维度进行综合…

Llama3-8B科研辅助应用:论文润色系统部署实战教程

Llama3-8B科研辅助应用&#xff1a;论文润色系统部署实战教程 你是不是也经常为英文论文的语言表达发愁&#xff1f;语法不够地道、用词不够精准、逻辑衔接生硬——这些问题&#xff0c;过去只能靠反复修改或请母语者润色。但现在&#xff0c;借助本地部署的大模型&#xff0c…

2026年GEO公司招商加盟推荐:基于多场景实测评价,解决信息过载与信任构建痛点

2025至2026年,生成式AI技术进入规模化商业落地阶段,AI搜索与智能推荐彻底改变了品牌与用户的连接方式。在此背景下,生成式引擎优化(GEO)已从一项前沿探索转变为决定企业未来流量的核心战略。随着豆包、DeepSeek、…

AutoGLM-Phone支持哪些设备?Android 7.0+适配部署指南

AutoGLM-Phone支持哪些设备&#xff1f;Android 7.0适配部署指南 AutoGLM-Phone 不是传统意义上的“手机App”&#xff0c;而是一套运行在本地电脑、面向安卓真机的轻量级AI智能体控制框架。它把手机变成可被自然语言驱动的“智能终端”——你不需要写代码&#xff0c;也不用学…

YOLOv9推理只需一条命令,官方镜像真香

YOLOv9推理只需一条命令&#xff0c;官方镜像真香 在产线质检的凌晨三点&#xff0c;工程师盯着屏幕等待第17次训练失败的日志&#xff1b;在智能安防项目交付前一周&#xff0c;团队还在为CUDA版本冲突导致的检测框偏移焦头烂额&#xff1b;在高校实验室里&#xff0c;研究生…

unet person image cartoon compound常见问题避坑指南:转换失败解决方案

unet person image cartoon compound常见问题避坑指南&#xff1a;转换失败解决方案 1. 这个工具到底能帮你解决什么问题&#xff1f; 你是不是也遇到过这些情况&#xff1a; 想给朋友圈发张酷炫卡通头像&#xff0c;试了三款APP&#xff0c;不是脸变形就是背景糊成一团&…

2026年AI搜索优化服务市场深度解析:五大服务商甄选策略与实效案例洞察

随着生成式AI重塑信息获取方式,AI搜索优化已成为企业在智能对话中获取曝光、建立信任并驱动增长的核心战略。能否在AI生成的答案中占据优先位置,直接影响品牌在新竞争环境下的市场份额与用户心智。面对市场上众多的服…