基于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为插件的属性)

Django的ModelForm的更多相关文章

  1. Django中ModelForm应用

    Django中ModelForm的应用 在传统中Form提交的POST的数据在服务器端获取时将不得不一一获取并验证数据的可靠性,但是使用django提供的Form时可简化该过程并提供相应的验证,同时D ...

  2. Django中Model-Form验证

    Django中Model-Form验证 class UserType(models.Model): caption=models.CharField(max_length=32) class User ...

  3. django中ModelForm save方法 以及快速生成空表单或包含数据的表单 包含错误信息

    django中ModelForm学习系列一~save方法 Model代码 from django.db import models # Create your models here. class P ...

  4. Django 四——ModelForm用法

    内容概要: 1.新增数据库表中数据 2.更新数据库表中数据 Django的ModelForm Django中内置了Form和Model两个类,有时候页面的表单form类与Model类是一一对应,因此分 ...

  5. Django(十四)课程机构列表页数据展示,Django的modelform,关于urls的重新分发

    关于urls的重新分发: 如果所有url都配置在根路径的urls.py里,会特别多,而且也不易于修改,Django框架里支持urls的重新分发: 1.在根路径的urls配置上: PS:namespac ...

  6. 【Django】--ModelForm组件

    ModelForm a.class Meta: model,#对应Model的 fields=None,#字段 exclude=None,#排除字段 labels=None,#提示信息 help_te ...

  7. Django的ModelForm组件

    创建类 from django.forms import ModelForm from django.forms import widgets as wd from app01 import mode ...

  8. Django之modelform组件

    一.简介与基本使用 简介:django中的modelform组件同时具有model和form作用,但是耦合度比较高,当项目需要拆分时候就比较困难了,所以在使用modelform时候需要先考虑项目的扩展 ...

  9. 【django之modelform】

    一.什么是modelform ModelForm顾名思义就Form和Django的Model数据库模型结合体,可以简单.方便得对数据库进行增加.编辑操作和验证标签的生成: 举例说明: 比如我们的数据库 ...

随机推荐

  1. Codeforces Round #345(Div. 2)-651A.水题 651B.。。。 651C.去重操作 真是让人头大

    A. Joysticks time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  2. BZOJ1258: [CQOI2007]三角形tri

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1258 如果最后一位是4,那就改成123就好了. 然后最后一位不是4的话,至多三个答案,然后可以 ...

  3. TI-RTOS 之 PWM

    TI-RTOS 之 PWM CC1310 有4个定时器,8个PWM通道,在TI-RTOS它的驱动是写好的,引用时需要包含 PWM.h头文件即可. 一般是任务主体之前,或者主函数进行初始化. Board ...

  4. ZooKeeper 分布式共享锁的实现

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/8352919.html ------------------------------------ ...

  5. KEIL MDK 查看代码量、RAM使用情况--RO-data、RW-data、ZI-data

    KEIL RVMDK编译后的信息 Code是代码占用的空间, RO-data是 Read Only 只读常量的大小,如const型, RW-data是(Read Write) 初始化了的可读写变量的大 ...

  6. Mysql开启远程连接方法

    分类: 数据库开发技术 解决MySQL不允许从远程访问的方法 开启 MySQL 的远程登陆帐号有两大步: 1.确定服务器上的防火墙没有阻止 3306 端口. MySQL 默认的端口是 3306 ,需要 ...

  7. vue2.0集成百度UE编辑器,上传图片报错!!!

    我这边配置进去之后,界面加载,文本输入都没有问题,就是上传图片会有问题 这张图, 左边红色框框 就是目录结构咯, 右边红色框框 就是各种网上教程给出的第一个路径配置对吧, 下面的就是绿色 服务器接口配 ...

  8. Oracle创建、管理撤销表空间

    撤销管理模式: 用户通过设定撤销管理模式(undo mode)就可以灵活地选择使用手动撤销管理(manual undo management)或自动撤销管理(automatic undo manage ...

  9. django下命令行工具

    django-admin.py是Django的一个用户管理任务的命令行工具,manage.py是对django-admin.py的简单包装,每个Django Project里面都包含一个manage. ...

  10. Linux安装mysql 在/etc下没有my.cnf 解决办法

    进入 /usr/share/mysql  将my-medium.cnf 移动到etc 并且改名为my.cnf