Django的ModelForm

简介: 基于django.forms.ModelForm:与模型类绑定的Form先定义一个ModelForm类,继承ModelForm类from django.forms import ModelFormclass MyModelForm(ModelForm): class Meta: model=models.

基于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为插件的属性)
目录
相关文章
|
Web App开发 前端开发 数据库
Django中的ModelForm
一、ModelForm的基本用法示例: from django import forms from app01 import models class BookModelForm(forms.
1228 0
|
Python 前端开发 数据库
第24天,Django之ModelForm
一. 创建一个ModelForm 1.1 使用之前需要导入对应app中的models和Django提交的ModelForm类 from django.forms import ModelForm from app01.
1093 0
|
Web App开发 数据库 Python
|
数据安全/隐私保护 Python
|
6月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
293 1
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
703 45
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
500 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
551 7
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
474 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发