基于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. AtCoder Regular Contest 077

    跟身在国外的Marathon-fan一起打的比赛,虽然最后没出F但还是涨分了. C - pushpush 题意:n次操作,每次往一个序列后面塞数,然后把整个序列翻转. #include<cstd ...

  2. 4395: [Usaco2015 dec]Switching on the Lights

    每次到达一个点,或者点亮一个房间的灯的时候,检查一下它四周的点能否走. 一开始看错题了..要求的是最多能开多少房的灯. #include<cstdio> #include<iostr ...

  3. cin与cout详解

    输入和输出并不是C++语言中的正式组成成分。C和C++本身都没有为输入和输出提供专门的语句结构。输入输出不是由C++本身定义的,而是在编译系统提供的I/O库中定义的。C++的输出和输入是用" ...

  4. java如何获取一个对象的大小

    When---什么时候需要知道对象的内存大小 在内存足够用的情况下我们是不需要考虑java中一个对象所占内存大小的.但当一个系统的内存有限,或者某块程序代码允许使用的内存大小有限制,又或者设计一个缓存 ...

  5. tomcat实现热部署的配置

    p { margin-bottom: 0.25cm; direction: ltr; color: rgb(0, 0, 0); line-height: 120%; text-align: justi ...

  6. thinkPHP内置字符串截取msubstr函数用法详解

    作者:陈达辉 字体:[增加 减小] 类型:转载 时间:2016-11-15 我要评论 这篇文章主要介绍了thinkPHP内置字符串截取函数用法,结合实例形式分析了thinkPHP内置的字符串截取函数功 ...

  7. 教你搭建你自己的Git服务器

    http://lib.csdn.net/article/git/50086 导读 现在我们将要学习如何搭建 git 服务器,如何编写自定义的 Git 钩子来在特定的事件触发相应的动作(例如通知),或者 ...

  8. 设置某个类使用或者禁用ARC

    设置这个类为ARC的 用:-fobjc-arc    设置这个类非ARC的:-fno-objc-arc 工程是非ARC的,但是引用的第三方类库是ARC的,所以要使用的时候,要单独设置这个第三方的类是A ...

  9. 为什么选择.NETCore?

    为什么.NETCore? 学习新的开发框架是一项巨大的投资.您需要学习如何在新框架中编写,构建,测试,部署和维护应用程序.作为开发人员,有许多框架可供选择,很难知道什么是最适合的工作.即使您正在使用. ...

  10. ubuntu 修复 could not open file '/etc/apt/sources.list'

    问题描述:could not open file '/etc/apt/sources.list' 问题分析:软件源被清空了,也就是 /etc/apt/sources.list 被删除了 解决问题:1. ...