from组件补充
一、定义的规则
- 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})
from组件补充的更多相关文章
- Django组件补充(缓存,信号,序列化)
Django组件补充(缓存,信号,序列化) Django的缓存机制 1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑 ...
- ModelForm组件和forms组件补充
forms组件补充: forms组件的三个字段:ChoiceField, ModelChoiceField & ModelMultipleChoiceField # forms组件:Choic ...
- Django-form组件补充
首先来看一个用户登录的实例 from django.forms import Form from django.forms import fields from django.forms import ...
- Django【第14篇】:Django之Form组件补充
补充 一.定义的规则 class TeacherForm(Form): #必须继承Form # 创建字段,本质上是正则表达式 username = fields.CharField( required ...
- drf分页组件补充
drf偏移分页组件 pahenations.py from rest_framework.pagination import LimitOffsetPagination class MyLimitOf ...
- forms组件补充与ModelForm简单使用与cookie与session
目录 forms组件钩子函数 forms组件字段参数 字段参数 validators详解 choices详解 widget详解 forms组件字段类型 ModelForm简单使用 cookie与ses ...
- django之Form组件补充
自定义验证规则 方法一: from django.forms import Form from django.forms import widgets from django.forms import ...
- Django框架----Form组件补充
一.Form类 创建Form类时,主要涉及到 [字段] 和 [插件],字段用于对用户请求数据的验证,插件用于自动生成HTML; 1.Django内置字段如下: 1 Field 2 required=T ...
- DAY19-Django之form组件补充
问题1:注册页面输入为空,报错:keyError:找不到password def clean(self): print("---" ,self.cleaned_data) # if ...
随机推荐
- 在 PHP 7 中不要做的 10 件事
在 PHP 7 中不要做的 10 件事 1. 不要使用 mysql_ 函数 这一天终于来了,从此你不仅仅“不应该”使用mysql_函数.PHP 7 已经把它们从核心中全部移除了,也就是说你需要迁移到好 ...
- An Introduction To The SQLite C/C++ Interface
1. Summary The following two objects and eight methods comprise the essential elements of the SQLite ...
- springboot常见写法
访问html文件 对于aa.html页面,采用跳转到方式:放在templates目录下时,要加一个thymeleaf依赖,并在controller跳转. 不用跳转到方式: 将依赖去掉,将control ...
- Git 遇到的坑
ssh出错 gitlab服务器添加完公钥之后,ssh服务器然后报了这个错误 sign_and_send_pubkey: signing failed: agent refused operation ...
- jquery懒加载插件 jquery_lazyload 下载
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code https://pan.baidu.com/s/1UbOeyL_AaSNN_KMA4M ...
- 【转】android SDK中的ddms使用详解
一.查看线程信息1.展开左侧设备节点,选择进程: 2.点击更新线程信息图标: 注意:如果你没有运行或调试程序的话,这些图标是不可用的! 3.右侧选择“Threads”标签: 二.查看堆栈信息1.展开左 ...
- 【js】把一个json对象转成想要的数组
var arrTemp = []; var arrRes = []; var jsonObjct = { "CRM_UNIT_TYPE_A": { "dic_desc&q ...
- 机器学习三剑客之Matplotlib基本操作
Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形 . 通过 Matplotlib,可以仅需要几行代码,便可以生成绘图,线型图, ...
- day96
在服务器上部署上线项目 Linux数据库处理 首先我们需要在mysql中创建bbs库,并导入数据库SQL脚本(就是原本运行在我们项目中的数据库) 前提:需要进入mysql中 mysql> cre ...
- redis底层设计(三)——redis数据类型
今天我们来看一下redis的数据类型.既然redis的键值对可以保存不同类型的值,那么很自然就需要对键值对的类型进行检查以及多态处理.下面我们将对redis所使用的对象系统进行了解,并分别观察字符串. ...