博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django学习【第14篇】:Django之Form组件补充
阅读量:6293 次
发布时间:2019-06-22

本文共 3088 字,大约阅读时间需要 10 分钟。

一、定义的规则

复制代码
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)  #
,
,
]> 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/kcwxx/p/10156184.html

你可能感兴趣的文章
Selenium 自动登录考勤系统
查看>>
关于如何以编程的方式执行TestNG
查看>>
智能照明造福千家万户 家居智能不再是梦
查看>>
物联网如何跳出“看起来很美”?
查看>>
浅谈MySQL 数据库性能优化
查看>>
《UNIX/Linux 系统管理技术手册(第四版)》——1.10 其他的权威文档
查看>>
灵动空间 创享生活
查看>>
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.6 UDP回射客户程序:dg_cli函数...
查看>>
不要将时间浪费到编写完美代码上
查看>>
《算法基础:打开算法之门》一3.4 归并排序
查看>>
高德开放平台开放源代码 鼓励开发者创新
查看>>
《高并发Oracle数据库系统的架构与设计》一2.5 索引维护
查看>>
Firefox 是 Pwn2own 2014 上攻陷次数最多的浏览器
查看>>
阿里感悟(十八)- 应届生Review
查看>>
话说模式匹配(5) for表达式中的模式匹配
查看>>
《锋利的SQL(第2版)》——1.7 常用函数
查看>>
jquery中hover()的用法。简单粗暴
查看>>
线程管理(六)等待线程的终结
查看>>
spring boot集成mongodb最简单版
查看>>
DELL EqualLogic PS存储数据恢复全过程整理
查看>>