フォームの知識やその他の補足新しい知識は、今日学びました

まず、ルールの定義

コードをコピー
クラス TeacherForm(フォーム):  フォームを継承しなければなりません
    #は本質的には、フィールドを作成し、正規表現で 
    ユーザー名= fields.CharField(
        必要 = Trueの場合、      必要なフィールド 
        error_messages = { 必須ユーザー名は空にすることはできません! }、  表示中国語エラー 
        ウィジェット= widgets.TextInput(ATTRS = { プレースホルダユーザ名クラスフォームコントロール })、  自動的に生成された入力ボックス 
        ラベル=" 姓名" 
        label_suffix = " " 
    パスワード = fields.CharField(= Trueの必要、= {error_messages ' 必要'' 密码不能为空' 、} 
                                ウィジェット = widgets.PasswordInput(ATTRS = { ' プレースホルダ''を密码' ' クラス'' フォームコントロール' })、
                                ラベル = "パスワード"
                                label_suffix = #は空にすることはできません

    メールに = fields.EmailField(
        必須 = 真、
        error_messages、 = { 必須メールを空にすることはできません!無効無効なメールボックス}、
        ウィジェット =ウィジェット.EmailInput(ATTRSの= { " プレースホルダ"" Eメール""クラス"フォームコントロール })、  自動的に生成された入力ボックス 
        ラベル= メールボックス
        label_suffix = #は空と均一なフォーマットのメールボックスにすることはできません

コードをコピー

 

レンダリングページ

あなたは、この第二の方法で、以下を追加する必要があります。

 第二に、ドロップダウンボックスのルール

 

第三に、人々はユーザーが存在しない判断、何の追加はありません

インポートする必要があります:

django.core.exceptions インポート ValidationErrorをします

第四に、初期変更するために使用

 

第五に、カスタム設定

1、の設定で:

2、導入設定

django.conf インポート設定

 使用して3、

 第六に、(様式で)二つの方法で多くの修飾

コードをコピー
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})
コードをコピー

 

一、定义的规则

コードをコピー
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を追加することができ
            リターンリダイレクト(/ teacherindex / (「?=====」、form.errors、タイプの(form.errors))が障害印刷#を返します。結果
            #の印刷(form.errors [ "ユーザー名"] [0])#1のget復帰に失敗した結果、するページをレンダリング
            返すレンダリング(リクエスト、" addteacher.html "、{ " フォーム":}フォームを)
コードをコピー

 

おすすめ

転載: www.cnblogs.com/maaosheng/p/11621495.html