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})
需要注意的是,ModelForm在sava的时候有一个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的更多相关文章
- Django中ModelForm应用
Django中ModelForm的应用 在传统中Form提交的POST的数据在服务器端获取时将不得不一一获取并验证数据的可靠性,但是使用django提供的Form时可简化该过程并提供相应的验证,同时D ...
- Django中Model-Form验证
Django中Model-Form验证 class UserType(models.Model): caption=models.CharField(max_length=32) class User ...
- django中ModelForm save方法 以及快速生成空表单或包含数据的表单 包含错误信息
django中ModelForm学习系列一~save方法 Model代码 from django.db import models # Create your models here. class P ...
- Django 四——ModelForm用法
内容概要: 1.新增数据库表中数据 2.更新数据库表中数据 Django的ModelForm Django中内置了Form和Model两个类,有时候页面的表单form类与Model类是一一对应,因此分 ...
- Django(十四)课程机构列表页数据展示,Django的modelform,关于urls的重新分发
关于urls的重新分发: 如果所有url都配置在根路径的urls.py里,会特别多,而且也不易于修改,Django框架里支持urls的重新分发: 1.在根路径的urls配置上: PS:namespac ...
- 【Django】--ModelForm组件
ModelForm a.class Meta: model,#对应Model的 fields=None,#字段 exclude=None,#排除字段 labels=None,#提示信息 help_te ...
- Django的ModelForm组件
创建类 from django.forms import ModelForm from django.forms import widgets as wd from app01 import mode ...
- Django之modelform组件
一.简介与基本使用 简介:django中的modelform组件同时具有model和form作用,但是耦合度比较高,当项目需要拆分时候就比较困难了,所以在使用modelform时候需要先考虑项目的扩展 ...
- 【django之modelform】
一.什么是modelform ModelForm顾名思义就Form和Django的Model数据库模型结合体,可以简单.方便得对数据库进行增加.编辑操作和验证标签的生成: 举例说明: 比如我们的数据库 ...
随机推荐
- 【JavaScript_DOM 淘宝购物车】
让我们一起看一下淘宝的购物车是怎么做的吧,刚刚入门的我可能很多地方的用法都不够优化,不过个人感觉先把逻辑清晰之后再做的话其实也并不难哦, 以下是我做的页面代码: HTML代码: <!DOCTYP ...
- Linux 下非root用户使用docker
Linux 下非root用户使用docker 通常我们使用linux系统的时候,最好是不要直接使用root账号,但是使用Docker的时候,默认又是不能使用非root用户的,关于原因,官方说法如下: ...
- POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 53703 Accepted: 25237 ...
- BZOJ2441: [中山市选2011]小W的问题
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2441 首先要注意到x1>x3且x5>x3(要是没有这个设定就是树状数组水题了.. ...
- python 元组学习
元组用tuple表示,用,分割开,和列表类似,但是没有排序修改等高级操作.简单地说就是终态的...... >>> tuple1 = (1,2,3)>>> type( ...
- RPM挂载光盘(使用iso里面的来搭建yum环境)就是离线模式,
找到光盘的完整路径名.在命令行输入:ls -l /dev | grep cdrom. 可以看到光盘的名字叫做:cdrom1.然后在命令行执行: mount /dev/cdrom1 /mnt/ ...
- [C#]使用控制台获取天气预报
本例子主要是使用由中央气象局网站(http://www.nmc.gov.cn)提供的JSON API,其实现思路如下: 1.访问获取省份(包含直辖市.自治区等,以下简称省份)的网址(http://ww ...
- linux 下查看有当前文件夹有多少个文件
ls |wc -w
- ThinkPHP3.2 实现Mysql数据库备份
<?php header("Content-type:text/html;charset=utf-8"); //配置信息 $cfg_dbhost = 'localhost'; ...
- win7系统如何在防火墙里开放端口
用到的端口需要在防火墙里开放,win7的比XP的要复杂一些,此方法同样适用于server2008系统 方法/步骤 1 依次点击"开始"-"控制面板"-" ...