Django ModelForm使用(初学)
1.目的是根据员工表字段,实现一个新增员工的数据填写页面

2.在views.py文件中按下面的格式写
定义 ModelForm 类:UserModelForm (自己命名的类名)使用时需要导入包
定义视图函数:user_model_form_add(在函数中使用form = UserModelForm())

定义了一个 Django ModelForm 类 UserModelForm,用于创建或编辑 UserInfo 模型的实例,表单包含 name、password、age、account、create_time、gender 和 depart 字段。在 __init__ 方法中,为每个字段的 HTML 输入元素动态添加了 class="form-control" 和 placeholder 属性,以便使用 Bootstrap 样式并显示字段标签作为占位符。user_model_form_add 视图函数处理 GET 和 POST 请求:当用户访问页面时(GET 请求),渲染一个空表单;当用户提交表单时(POST 请求),验证表单数据,如果数据有效则保存到数据库并重定向到 /user/list 页面,如果数据无效则打印错误信息(用于调试)。
-
表单定义:通过
ModelForm快速生成与模型关联的表单,并自定义字段的 HTML 属性。 -
视图处理:处理用户请求,显示空表单或验证并保存提交的数据,最后重定向或返回错误信息。
注意:form.save() 会将数据保存到数据库中,这个数据库就是我们在UserModelForm中定义的model = models.UserInfo,即UserInfo表
from django.shortcuts import render,redirect
from employees import models
from django import formsclass UserModelForm(forms.ModelForm):class Meta:model = models.UserInfofields = ["name","password","age", "account", "create_time", "gender", "depart"]def __init__(self, *args, **kwargs):# 调用父类的初始化方法super().__init__(*args, **kwargs)# 遍历表单中的所有字段for name, field in self.fields.items():# 为每个字段的 widget 添加 HTML 属性field.widget.attrs = {"class": "form-control", # 添加 Bootstrap 样式"placeholder": field.label # 设置占位符为字段的标签}def user_model_form_add(request):# 处理 GET 请求:显示空表单if request.method == 'GET':form = UserModelForm() # 创建一个空的 UserModelForm 实例# 渲染模板,并将表单对象传递给模板return render(request, 'user_model_form_add.html', {"form": form})# 处理 POST 请求:提交表单数据form = UserModelForm(data=request.POST)# 验证表单数据是否有效if form.is_valid():# 如果数据有效,保存表单数据到数据库form.save()return redirect("/user/list") # 重定向到用户列表页面else:# 如果数据无效,打印错误信息(用于调试)print(form.errors)
user_model_form_add.html 使用传递过来的数据

完整代码
{% extends 'layout.html' %}{% block content %}
<div class="container"><div class="c1"><a class="btn btn-success" href="/user/add">新建用户</a></div><div class="c1"><a class="btn btn-success" href="/user/model/form/add">新建用户ModelForm</a></div><div class="card c1"><div class="card-header">新建用户</div><div class="card-body"><form method="post">{% csrf_token %}{% for field in form%}<div class="form-label"><label>{{ field.label }}</label>{{ field }}</div>{% endfor %}<button type="submit" class="btn btn-primary">提交</button></form></div></div></div>
{% endblock %}
实现效果

输入数据,提交

添加成功
3.校验错误信息提示
上面编写的错误输出只是测试,我想直接在网页上显示错误提示,这样更直观,代码修改如下

def user_model_form_add(request):# 处理 GET 请求:显示空表单if request.method == 'GET':form = UserModelForm() # 创建一个空的 UserModelForm 实例# 渲染模板,并将表单对象传递给模板return render(request, 'user_model_form_add.html', {"form": form})# 处理 POST 请求:提交表单数据form = UserModelForm(data=request.POST)# 验证表单数据是否有效if form.is_valid():# 如果数据有效,保存表单数据到数据库form.save()return redirect("/user/list") # 重定向到用户列表页面else:# 校验失败,在页面上显示错误信息return render(request, 'user_model_form_add.html', {"form": form})
user_model_form_add.html增加这一行
<span style="color: red;">{{ field.errors.0 }}</span>

效果如下,出现提示

上面的是浏览器做的校验,我们想自己校验提示,增加一个:novalidate

效果如下

我想对都写字段增加限制,Django会自动检查,例如
重写name和password字段,设置最小长度和标签,如果用户输入的长度不足,Django 会自动显示错误提示。

效果

更复杂的写法

注意导入对应的库
from django.shortcuts import render,redirect
from employees import models
from django import forms
from django.core.validators import MinLengthValidator, RegexValidatorclass UserModelForm(forms.ModelForm):name = forms.CharField(min_length=3,label="用户名")password = forms.CharField(label="密码",widget=forms.PasswordInput(),validators=[MinLengthValidator(6, message="密码长度不能少于 6 个字符。"),RegexValidator(regex=r'^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$',message="密码必须包含字母和数字,且长度为 6-20 个字符。")])class Meta:model = models.UserInfofields = ["name","password","age", "account", "create_time", "gender", "depart"]def __init__(self, *args, **kwargs):# 调用父类的初始化方法super().__init__(*args, **kwargs)# 遍历表单中的所有字段for name, field in self.fields.items():# 为每个字段的 widget 添加 HTML 属性field.widget.attrs = {"class": "form-control", # 添加 Bootstrap 样式"placeholder": field.label # 设置占位符为字段的标签}
效果



如果想修改提示变成中文,例如

修改如下

效果

学习:【最新Python的web开发全家桶(django+前端+数据库)-哔哩哔哩】 https://b23.tv/hSTu5xi
相关文章:
Django ModelForm使用(初学)
1.目的是根据员工表字段,实现一个新增员工的数据填写页面 2.在views.py文件中按下面的格式写 定义 ModelForm 类:UserModelForm (自己命名的类名)使用时需要导入包 定义视图函数:user_model_form_add(在函…...
android ViewPager 管理 Fragment的预加载onCreate
一、前言 当ViewPager 加载多个 Fragment时候,怎么管理Fragment预加载。因为有些数据需要提前加载,第一个方便后面数据使用,提前初始化。或者预加载网络数据等。 二、实现示例 在onCreate方法进行数据预加载。如果在onCreateView函数里面&…...
运用先进的智能算法和优化模型,进行科学合理调度的智慧园区开源了
智慧园区场景视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。充分利用现有…...
国产编辑器EverEdit -告别东找西找!一键打开当前文件所在目录!
1 文件操作 2 应用场景 在文件编辑过程中,有时需要对文件进行一些操作,比如:在命令窗口输入文件路径、文件名,进入到文件目录,对文件进行压缩等,如果没有直达命令,用户需要通过文件管理器找到目…...
【分治法】线性时间选择问题
问题描述 给定线性序列中n个元素和一个整数k,1≤k≤n,要求在线性时间中找出这n个元素中第k小的元素 常规思路 常规思路是对序列先排序,落在第k个位置的元素就是第k小的元素。 这种方法的时间复杂度不是线性的,是O(nlogn)的时间…...
SpringBoot速成(16)项目部署P30
部署是一个非常重要的环节。部署的目的是将开发完成的程序运行在服务器上,让其他用户或系统能够访问和使用它。 让程序对外提供服务 开发环境的局限性:开发环境通常是本地计算机,仅供开发人员使用。但实际应用需要让其他用户(比如…...
【Mysql:数据库的基础操作】
目录 数据库创建,删除基础指令: 数据库的编码集: 数据库备份与恢复: 表的操作: 数据库创建,删除基础指令: show databases;//查看数据库列表//创建数据库 create database db_name; crea…...
Nacos Derby 远程命令执行漏洞修复建议
由于Nacos < 2.4.0 BETA 存在 Derby 远程命令执行漏洞,恶意攻击者利用此漏洞可以未授权执行SQL语句,最终导致任意代码执行。目前该漏洞PoC和技术细节已在互联网上公开。 一、漏洞情况分析 Nacos 是一个功能强大的服务注册与发现、配置管理平台&#…...
idea 2023.3.7常用插件
idea 2023.3.7常用插件 文档 idea 2019.3常用插件idea 2023.3.7常用插件 idea 2023.3.7常用插件 插件名称插件版本说明1AceJump3.5.9AceJump允许您快速将插入符号导航到编辑器中可见的任何位置。只需按“ctrl;”,键入一个字符,然后在Ace …...
DeepSeek和ChatGPT在科研课题设计和SCI论文写作中的应用
DeepSeek和ChatGPT在科研课题设计和SCI论文写作中的应用 一、DeepSeek和ChatGPT的基础理论 (理论讲解案例分析) 1.DeepSeek的技术架构 (1)DeepSeek的定义与核心目标 (2)DeepSeek的主要类型 如DeepSeek-R1、DeepSeek-V3等 (3)DeepSeek的主要创新点、优势能力以及主要应用场景 2.…...
kubeadm拉起的k8s集群证书过期的做法集群已奔溃也可以解决
kubeadm拉起的k8s集群证书过期的做法 这个是很久之前遇到的了,今天有空(心血来潮)就都回忆回忆写在这里为爱发光,部分内容来自arch先生(死党)的帮助。有时候有很多部门提了建k8s的需求,有些是临…...
2024年河北省职业院校技能大赛网络系统管理赛项样题解法
有问题请留言或主页私信咨询 2024年河北省职业院校技能大赛 网络系统管理赛项 网络构建 目录 任务描述 任务清单 (一)基础配置 (二)有线网络配置 (三)无线网络配置 (四&am…...
【开源免费】基于SpringBoot+Vue.JS个人博客系统(JAVA毕业设计)
本文项目编号 T 203 ,文末自助获取源码 \color{red}{T203,文末自助获取源码} T203,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
纯新手教程:用llama.cpp本地部署DeepSeek蒸馏模型
0. 前言 llama.cpp是一个基于纯C/C实现的高性能大语言模型推理引擎,专为优化本地及云端部署而设计。其核心目标在于通过底层硬件加速和量化技术,实现在多样化硬件平台上的高效推理,同时保持低资源占用与易用性。 最近DeepSeek太火了&#x…...
JDK 8+新特性(Stream API、Optional、模块化等)
JDK 8新特性(Stream API、Optional、模块化等) 一、Stream API 1.1 概述 Stream API 是 Java 8 引入的一个新的抽象概念,它允许以声明式的方式处理数据集合。Stream 不是一个数据结构,而是对数据源(如集合、数组等&…...
国产编辑器EverEdit - 独门暗器:自动监视剪贴板内容
1 监视剪贴板 1.1 应用场景 如果需要对剪贴板的所有历史进行记录,并进行分析和回顾,则可以使用监视剪贴板功能,不仅在EverEdit中的复制会记录,在其他应用的复制也会记录。 1.2 使用方法 新建一个空文档(重要:防止扰乱…...
贪心算法-买卖股票的最佳时机
买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天 的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股 票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易…...
文本操作基础知识:正则表达式
目录 摘要: 一、语法 二、匹配模式pattern 1、普通字符[ ] 2、限定字符 3、定位字符 4、运算字符( ) 三、修饰符flags 四、各语言的正则使用 1、Python的re 参考资料: 摘要: 常用匹配:[A-C]、[^A-C]、\w、\d、\n、\r、…...
【Scrapy】Scrapy教程6——提取数据
前一小节我们拿到了页面的数据,那页面中那么多内容,我们想要其中的部分内容,该如何获取呢?这就需要对我们下载到的数据进行解析,提取出来想要的数据,这节就讲讲如何提取数据。 引入 我们编辑保存下来的shouye.html文件看下,发现这是什么鬼,全是如下图的代码。 没错…...
PHP 网络编程介绍
PHP 学习资料 PHP 学习资料 PHP 学习资料 在当今数字化时代,网络编程是开发各类应用必不可少的技能。PHP 作为一门广泛应用于 Web 开发的编程语言,同样具备强大的网络编程能力。接下来,我们将深入探讨 PHP 中网络连接的建立、Socket 编程、…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
