基于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. 【测试编码URI的函数】

    //测试编码URI的函数 var url="http://www.phpfamily.org/test.php?search= this is a test&sum=1+2" ...

  2. 洛谷 P1876 开灯(思维,枚举,规律题)

    P1876 开灯 题目背景 该题的题目是不是感到很眼熟呢? 事实上,如果你懂的方法,该题的代码简直不能再短. 但是如果你不懂得呢?那...(自己去想) 题目描述 首先所有的灯都是关的(注意是关!),编 ...

  3. COGS 144. [USACO Dec07] 魅力手镯【01背包复习】

    144. [USACO Dec07] 魅力手镯 ★   输入文件:charm.in   输出文件:charm.out   简单对比 时间限制:1 s   内存限制:8 MB 译 by CmYkRgB1 ...

  4. HDU-5340 Three Palindromes(字符串哈希)

    http://acm.hdu.edu.cn/showproblem.php?pid=5340 orz到了新的字符串hash姿势 #include<cstdio>#include<cs ...

  5. Kruskal求最小生成树

    #include<bits/stdc++.h> using namespace std; ; ; const int inf = 0x3f3f3f3f; ; typedef long lo ...

  6. find the nth digit(二分查找)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1597 find the nth digit Time Limit: 1000/1000 MS (Jav ...

  7. hbase安装版本

    Hbase的安装部署,依赖HDFS,Zookeeper-3.4.5,jDK1.7以上,Hadoop-2.5.0以上

  8. 解决Perhaps you are running on a JRE rather than a JDK?问题

    Maven-No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JD ...

  9. [国嵌攻略][119][Linux中断处理程序设计]

    裸机中断: 1.中断统一入口. 2.注册中断处理程序. 3.根据中断源编号,调用中断处理程序. Linux中断 1.在entry-armv.S中的_irq_svc是中断统一入口. 2.获取产生中断源的 ...

  10. linux日志查看命令

    tail tail 命令用于显示文本文件的末尾几行, 对于监控文件日志特别有用 tail example.txt #显示文件 example.txt 的后十行内容: tail -n 20 exampl ...