zoukankan      html  css  js  c++  java
  • Django的ModelForm

    基于django.forms.ModelForm:与模型类绑定的Form

    先定义一个ModelForm类,继承ModelForm类

    from django.forms import ModelForm
    
    class MyModelForm(ModelForm):
        class Meta:
            model=models.UserInfo
    
            fields="__all__"
    

    修改视图函数reg

        def reg(request):
            if request.method=="POST":
                model_form=MyModelForm()
        
                return render(request,"reg.html",{"model_fom":model_form})
    

    修改reg.html网页

        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
        </head>
        <body>
        <h4>{{ error_message }}</h4>
        <form action="/reg/" method="post">
            {% csrf_token %}
            {{ model_fom.as_p }}
            <input type="submit">
        </form>
        </body>
        </html>
    

    打开注册页面,可以看到,在定义数据库的用户信息表中定义的字段信息都显示在注册网页上了。

    而且这里也支持使用万能的句点号,以及验证用户输入的信息是否与数据库中定义的类型符合

    用户输入信息,验证通过后,就要保存到数据库中。

    def reg(request):
        if request.method=="GET":
            model_form=MyModelForm()
    
            return render(request,"reg.html",{"model_form":model_form})
        else: 
    
            model_form=MyModelForm(request.POST) # 实例化MyModelForm类
            if model_form.is_valid(): # 如果用户输入的信息合法
    
                model_form.save()       # 用户输入的信息保存到数据库中
                return redirect("/index/")
    
            return render(request,"reg.html",{"model_form":model_form})
    

    使用ModelForm编辑用户

    编辑用户的视图函数如下

        from django.forms import ModelForm
        
        class MyModelForm(ModelForm):
            class Meta:
                model=models.UserInfo
        
                fields="__all__"
        
        def edituser(request,uid):
            user_obj = models.UserInfo.objects.filter(id=uid).first()
        
            if not user_obj:
                return redirect("/index/")
        
            if request.method=="GET":
        
                model_form=MyModelForm(instance=user_obj)
        
            else:
                model_form=MyModelForm(request.POST,instance=user_obj)
        
                if model_form.is_valid():
                    model_form.save()
                    return redirect("/index/")
        
            return render(request,"edit.html",{"model_form":model_form})
    

    需要注意的是,ModelFormsava的时候有一个commit的参数,commit的值默认为True

    当commit等于True的时候,ModelForm就会把数据提交到数据库当中保存;
    当commit设定为False的时候,ModelForm并不会真正在数据库中保存数据.
    

    Django的ModelForm的其他的参数和功能

    可以在class Meta中设定的功能:

    model=models.Userinfo           # 显示对应Model的字段,这里显示用户信息表
    
    fields="__all__"                # 显示数据表中所有的字段
    
    fields=["username","age"]       # 显示数据表中指定的字段
    
    exclude=["email"]               # 不显示数据表中某些字段
    
    labels={
    	"username":"用户名",
    	"age":"年龄",
    	"email":"邮箱"
    }                               # 自定义页面的标签
    
    help_texts={
    	"username":"请输入正确的用户名",
    	"email":"请输入正确的邮箱格式"
    }                               # 自定义在标签后面显示的提示帮助信息
    
    error_messages={
    	"username":{'required':"用户名不能为空"}
    	"email":{'invalid':"邮箱不能为空"}
    }                               # 自定义错误信息,用户输入错误时显示
    
    from django import fields as field_widget
    field_classes={
    	"email":field_widget.EmailField
    }                               # 定义标签的类型,在这里把email这个输入框的类型更改为email类型
    
    from django.forms import widgets as formwidget
    widgets={
    	"username":formwidget.Textarea(atts={"class":"c1"})
    }                               # 自定义插件(attrs为插件的属性)
  • 相关阅读:
    实现非父子之间通信,兄弟组件之间的数据传递--eventBus
    Vue的核心思想是什么..........
    Vue——核心思想--mvvm
    高效遍历匹配Json数据,避免嵌套循环
    js 报错(intermediate value)(...) is not a function
    【Three.js】three.js 中的矩阵变换及两种旋转表达方式
    【Vue源码】将二维数组变为一维数组
    【移动端】cordova实现退出app功能
    【移动端】ionic cordova 打包debug调试版、release发布版
    【Vue源码】document.querySelector()方法
  • 原文地址:https://www.cnblogs.com/renpingsheng/p/7875015.html
Copyright © 2011-2022 走看看