django----Form扩展

用第二种方式需要加上下面的这个:

 

 

 

三、判断用户民是不存在,存在就不添加了

 

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})

  

posted @ 2019-03-24 16:46  小名的同学  阅读(219)  评论(0编辑  收藏  举报