Django之Form组件补充
一、定义的规则
class TeacherForm(Form): #必须继承Form# 创建字段,本质上是正则表达式username = fields.CharField(required=True, #必填字段error_messages={"required":"用户名不能为空!!"}, #显示中文错误提示widget=widgets.TextInput(attrs={"placeholder":"用户名","class":"form-control"}), #自动生成input框label="姓名",label_suffix=":")password = fields.CharField(required=True, error_messages={'required': '密码不能为空'},widget=widgets.PasswordInput(attrs={'placeholder': '密码', 'class': 'form-control'}),label="密码",label_suffix=":") # 不能为空email = fields.EmailField(required=True,error_messages={"required":"邮箱不能为空!!","invalid":"无效的邮箱"},widget=widgets.EmailInput(attrs={"placeholder": "邮箱", "class": "form-control"}), # 自动生成input框label = "邮箱",label_suffix = ":") #不能为空且邮箱格式要一致
页面上渲染
用第二种方式需要加上下面的这个:
二、下拉框的规则
三、判断用户民是不存在,存在就不添加了
需要导入:
from django.core.exceptions import ValidationError
、
四、initial 修改时用到
五、自定义配置
1、在settings中:
2、导入settings
from django.conf import settings
3、使用
六、多对多修改两种方式(用Form)
def editteacher(request,nid):obj = models.UserInfo.objects.filter(id=nid, ut_id=1).first()# print(obj.username)if not obj:return redirect("/teacherindex/")if request.method=="GET":print([obj.id for obj in obj.teacher_classes.all()]) #[2] 拿到select框的id是为了要做默认显示的form = TeacherForm(initial={"username":obj.username,"password":obj.password,"email":obj.email,"teacher_classes":[obj.id for obj in obj.teacher_classes.all()]}) #就让显示一个input框,并且带有原来哪一行的内容return render(request, "editteacher.html", {"form":form})else:form = TeacherForm(data=request.POST)if form.is_valid():#开始校验,注意这要加括号cls_list = form.cleaned_data.pop("teacher_classes")print(cls_list)models.UserInfo.objects.filter(id=nid).update(**form.cleaned_data)obj.teacher_classes.set(cls_list) #更新第三张表return redirect("/teacherindex/")else:return render(request, "editteacher.html", {"form":form})
七、多对多添加(用Form)
def addteacher(request):if request.method=="GET":form = TeacherForm() #只是让显示一个input框return render(request, "addteacher.html", {"form":form})else:form = TeacherForm(data=request.POST)# print(form) #<QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>, <UserInfo: UserInfo object>]>if form.is_valid():# 开始验证# print('执行成功',form.cleaned_data) # 所有匹配成功,字典# # {'username': 'ghf', 'password': '435', 'email': 'fddfg@qq.com', 'teacher_classes': ['4']}cls_list = form.cleaned_data.pop("teacher_classes")print("============id",cls_list)form.cleaned_data['ut_id'] = 1#创建新老师的对象teacher_obj = models.UserInfo.objects.create(**form.cleaned_data)#创建新老师和班级的关系teacher_obj.teacher_classes.add(*cls_list) #以前添加的是对象,现在也可以吧id添加进去return redirect("/teacherindex/")else:# print("=====?",form.errors,type(form.errors))#返回失败的结果# print(form.errors["username"][0]) #拿到返回失败的结果,渲染到页面return render(request, "addteacher.html", {"form":form})
转载于:https://www.cnblogs.com/morgana/p/8492972.html
Django之Form组件补充相关推荐
- Django之Form组件介绍
--------------------------------------前言------------------------------------ 在进入正题之前,想多说两句; 当我们开始学习一 ...
- 转载:Django之Form组件
Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建Form类 + View C ...
- Django的form组件提交时错误不显示或无法提交
出现的问题:在学习django的form组件时,对不符合form组件定义的字段无法提交,进而导致无法显示出自定义的错误信息.(因为无法提交就代表着数据没有传给后台,然后你的错误回显是在后台对数据的检验 ...
- Django中Form组件的使用
Form介绍 HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入 ...
- Django之Form组件
一.Form组件介绍 1.Form组件可以做的几件事情 1.用户请求数据验证 2.自动生成错误信息 3.打包用户提交的正确信息 4.如果其中有一个错误了,其他的正确这,保留上次输入的内容 5.自动创建 ...
- Django框架-Form组件
一.DjangoForm组件介绍 我们之前在html页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校 ...
- Django之form组件!
一.手动实现注册功能 注册功能1.渲染前端标签获取用户输入 >>> 渲染标签2.获取用户输入传递到后端校验 >>> 校验数据3.校验未通过展示错误信息 >& ...
- Django之form组件加cookie,session
---恢复内容开始--- 多对表的三种创建 一全自动(推荐使用) 优点:不需要手动创建第三张表也就是我们之前一直用的,靠那个不会在数据库中显示的虚拟字段,告诉orm帮我们创建能够表示多对多关系的第三张 ...
- django.forms生成HTML,第21天,Django之Form组件
ModelForm 一.Form组件初识 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 mo ...
- 小白IT:Django框架—form组件和ModelForm
文章目录 一.form简介 1.form组件的功能 2.form组件的简单使用 数据库模型准备 form简单使用 在视图函数中写注册函数 模板文件login.html文件 二.Form中常用字段约束与 ...
最新文章
- LabVIEW图像灰度测量(基础篇—7)
- 对软件工程与计算机科学之间区别的看法
- 深入理解Java泛型
- RabbitMQ安装---rpm安装
- Don’t Worry.Be Scruffy.
- 【文智背后的奥秘】系列篇——分布式爬虫之WebKit
- TensorFlow模型保存和提取方法(含滑动平均模型)
- 大风车音乐计算机,大风车歌曲
- data为什么是一个函数
- 网络空间搜索FOFA
- 甘特图控件VARCHART XGantt的功能亮点
- 写给不会爱自己的人,我自己
- 漫漫人生路,悠悠岁月深。最快的脚步不是跨越,而是继续;
- 西门子s7-100模拟器仿真软件下载
- Python输入一个年份,判断是否为闰年
- 2022出海南亚:巴基斯坦电商市场现状及发展前景
- R语言计量:Newey-West调整
- Docker之快速搞定容器数据卷
- 【蓝桥杯】单片机学习(9)——多.c文件初认识及计算器实例
- 2018年华科考研复试机试题记录
热门文章
- 为什么说LinkedHashMap是Java中最大的数据结构? 了解一下?
- 从滴滴亏109亿说起
- Red Hat 发布新 logo:“没有脸了”
- 你没听过的IT技术解读,能秒懂的都是老司机...
- 流水线机制、滑动窗口协议、GBN、SR
- JavaScript:jklyDB
- mysql cluster推荐配置
- setCompoundDrawables和setCompoundDrawablesWithIntrinsicBounds区别
- 使用POI完成 EXCEL的 导出和导入
- http://blog.csdn.net/zbyufei/article/details/6096881