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‘: ‘[email protected]‘, ‘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/xiaohema/p/8456353.html

时间: 2024-08-30 09:05:13

Django 【第十二篇】Form组件进阶的相关文章

Django(十五)Form组件

https://www.cnblogs.com/haiyan123/p/7778888.html Form组件 - 对用户请求的验证 - AJax - Form - 生成HTML代码 a. 创建一个类 b. 类中创建字段(包含正则表达式) c. GET obj = Fr() obj.user = > 自动生成HTML d. POST obj = Fr(request.POST) if obj.is_valid(): obj.cleaned_data else: obj.errors return

Python开发【第二十二篇】:Web框架之Django【进阶】

Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 新随笔 联系 订阅 管理 随笔-124  文章-127  评论-205 Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻

django 之知识点总结以及Form组件

一.model常用操作 1.13个API查询:all,filter,get ,values,values_list,distinct,order_by ,reverse , exclude(排除),count,first,last,esits(判断是否存在) 需要掌握的all.values.values_list的区别 all:打印的是一个QuerySet集合,一个列表里面放的对象 values :是一个字典形式 values_list:是一个元组形式 all的性能是最低的 2.only和def

django 之知识点以及认识Form组件

django 之知识点总结以及Form组件 一.model常用操作 1.13个API查询:all,filter,get ,values,values_list,distinct,order_by ,reverse , exclude(排除),count,first,last,esits(判断是否存在) 需要掌握的all.values.values_list的区别 all:打印的是一个QuerySet集合,一个列表里面放的对象 values :是一个字典形式 values_list:是一个元组形式

跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探

SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特殊说明,本系列教程全采用以上版本 前面我们在聊服务网关Zuul的时候提到了Gateway,那么Zuul和Gateway都是服务网关,这两个有什么区别呢? 1. Zuul和Gateway的恩怨情仇 1.1 背景 Zuul是Netflix开源的一个项目,Spring只是将Zuul集成在了Spring

Egret入门学习日记 --- 第二十二篇(书中 9.7~9.8 节 内容)

第二十二篇(书中 9.7~9.8 节 内容) 开始 9.7节 内容. 重点: 1.进度条ProgressBar的声明和使用. 操作: 1.进度条ProgressBar的声明和使用. 现在真的轻车熟路了,很简单.无非就是设置一下最大值,当前值的属性. 然后,事件监听的话,也是一样的.只不过事件名字的话,我就选书中这个事件吧. 可惜不能发动图,不然你们就可以看到这个进度条,每帧+1的速度前进. 当然,如果你想换自定义皮肤,还是老规矩,去找默认的 EXML 文件. 然后,怎么换素材,就按照自己喜欢的换

SaltStack 学习笔记 - 第十二篇: SaltStack Web 界面

SaltStack 有自身的用python开发的web界面halite,好处是基于python,可以跟salt的api无缝配合,确定就比较明显,需要个性化对web界面进行定制的会比较麻烦,如果喜欢体验该界面的可以参考下面的文章  http://rfyiamcool.blog.51cto.com/1030776/1275443/ 我是运用另一个python+php来进行web开发,具体需要的工具有在我的另一篇文章里面介绍过,这里再重新进行整个开发介绍 首先介绍php 跟python通信的工具 pp

第二十二篇:再写Windows驱动,再玩Windbg---NET

2011年到现在,就没再怎么搞过Windows驱动了. 最近, 由于项目需要, 试着改一改一个显卡驱动(KMDOD), 从实践上证明, 我在理论上对一个驱动的架构的正确与否.(USB Display = KMDOD + AVStream). 其中, KMDOD是完成显示的部分功能, 完成其中的VidPN(Video present network), 将驱动中原来的POST物理设备转变为USB物理设备. 而AVStream之所以这样提出, 完成是由于USB Video class的启发, 要不然

SQL Server 索引的图形界面操作 &lt;第十二篇&gt;

一.索引的图形界面操作 SQL Server非常强大的就是图形界面操作.关于索引方面也一样那么强大,很多操作比如说重建索引啊,查看各种统计信息啊,都能够通过图形界面快速查看和操作,下面来看看SQL Server索引方面的GUI操作. 二.索引统计信息的图形界面操作 SQL Server 索引的图形界面操作 <第十二篇>

第二十二篇 信念

第二十二篇  信念 "信念"能带给一个人无穷的力量,这些力量可以支撑自己走过漫长的人生.一个人如果没有信念,就很难找到自己的人生方向,所以"信念"也可以理解为希望. 信念可以给到我们希望,也可以给到我们力量,所以一个人的信念会影响到自己的整个人生.当然信念也有好坏之分,好的信念能让自己积极向上.不畏艰难:坏的信念会让我们不思进取.随波逐流.这两种不同的信念会给到我们两种完全不同的人生,就看亲人们如何作出正确的选择. 一个人活在世上,可以选择走正确的人生道路,依靠好的