Django笔记&教程 6-3 使用模型(models)创建表单(form)
Django 自学笔记兼学习教程第6章第3节——使用模型(models)创建表单(form)
点击查看教程总目录
本文参考:Forms for models
1 - 初步介绍
很多时候,我们使用的表单,是与模型密切关联的(官方文档称之为紧密映射)。
比如注册学生账号,其表单与学生的模型字段基本是一一对应的。
这种情况下,自己一个一个去编辑设置表单的字段比较费事,而且如果模型中有字段修改,表单这边也要去修改。
在这种情况下,在表单中定义字段类型是多余的,因为您已经在模型中定义了字段。
因此,Django提供了一个辅助类ModelForm,帮助您从Django模型创建表单类。
举个例子
比如我们在models.py有这样一个学生类
from django.db import models
class Student(models.Model):
gender = [
("m", "男"),
("f", "女")
]
name = models.CharField(max_length=50, verbose_name="姓名")
gender = models.CharField(max_length=10, choices=gender, default='m', verbose_name="性别")
birthday = models.DateField(verbose_name="生日")
email = models.EmailField(verbose_name="邮箱")
info = models.CharField(max_length=255, verbose_name="个人简介", help_text="一句话介绍自己,不要超过250字")
grade = models.CharField(max_length=4, verbose_name="年级")
number = models.CharField(max_length=6, verbose_name="年级子学号")
password = models.CharField(max_length=30, verbose_name="密码")
我们要给这个学生类建立一个表单,用于在注册页面提交注册信息。
那么forms.py代码如下
from django import forms
from .models import Student
class StuRegisterForm(forms.ModelForm):
class Meta:
model = Student
fields = ('grade',
'name',
'password',
'confirm_password',
'gender',
'birthday',
'email',
'info')
其中Meta是元数据类,用于去编辑设置一些更深层次的设置。
要使用一个模型来创建表单,则在Meta元数据类中指定对应的model属性
fields属性见本文第二部分
2 - 选择字段
对于和模型紧密映射的表单,有时我们不希望有些字段能够被用户编辑(比如一些需要后台按照逻辑去生成的字段)
这个时候我们可以使用:
fields属性,设置哪些字段是可以让用户进行编辑的exclude属性,设置哪些字段是不让用户进行编辑的(用户在表单中也看不到这个字段)
上面两个属性一般使用列表(元组也可以),包含其需要指定的字段名。
fields属性可设置为特殊值'all',以指示应该使用模型中的所有字段
补充:如果你在模型字段上设置了edititable=False,那么通过ModelForm从模型创建的任何表单都不会包含该字段。
Django笔记&教程 6-3 使用模型(models)创建表单(form)的更多相关文章
- Django笔记&教程 总目录
本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 本项目笔记仍在不断创作中,还有些内容会根据自身所学不断更新完善 本项目主要为markdwon文档, ...
- Django笔记&教程 6-2 表单(Form)基础操作
Django 自学笔记兼学习教程第6章第2节--表单(Form)基础操作 点击查看教程总目录 1 - 编写表单类 创建新的表单类的代码,一般写到一个专门的forms.py文件中(一般放在对应的app文 ...
- Django笔记&教程 6-4 forms进阶操作,重写forms方法
Django 自学笔记兼学习教程第6章第4节--forms进阶操作,重写forms方法 点击查看教程总目录 1 - 重写clean方法 在本章第三节中,我们举了个注册学生账号的例子,里面我们使用模型来 ...
- Django笔记&教程 6-1 表单(Form)介绍
Django 自学笔记兼学习教程第6章第1节--表单(Form)介绍 点击查看教程总目录 1 介绍 如果网站要让用户输入并提交数据(比如注册登录),则需要用到表单. 单纯的html也能写出表单,格式一 ...
- Django框架基础知识11-会话状态保持及表单
浏览器存储cookie的方式不太安全,那有没有更好些的来存储登入状态的方式呢??? 状态保持----cookie和session: 状态保持: 1.http协议是无状态的:每次请求都是一次新的请求,不 ...
- HTML+CSS学习笔记(5)- 与浏览者交互,表单标签
HTML+CSS学习笔记(5)- 与浏览者交互,表单标签 1.使用表单标签,与用户交互 网站怎样与用户进行交互?答案是使用HTML表单(form).表单是可以把浏览者输入的数据传送到服务器端,这样服务 ...
- 读书笔记:《HTML5开发手册》Web表单
这是补充HTML5基础知识的第五篇内容,其他为: 一.HTML5-- 新的结构元素 二.HTML5-- figure.time.details.mark 三.HTML5-- details活学活用 四 ...
- struts2官方 中文教程 系列十一:使用XML进行表单验证
在本教程中,我们将讨论如何使用Struts 2的XML验证方法来验证表单字段中用户的输入.在前面的教程中,我们讨论了在Action类中使用validate方法验证用户的输入.使用单独的XML验证文件让 ...
- amazeui学习笔记--css(HTML元素3)--表单Form
amazeui学习笔记--css(HTML元素3)--表单Form 一.总结 1.form样式使用:在容器上添加 .am-form class,容器里的子元素才会应用 Amaze UI 定义的样式. ...
随机推荐
- Ubuntu安装Oracleclient远程连接数据库
平时Oracle数据库都安装在本地或者WindowsServer上进行使用,但因为工作需要,领导要求在虚拟机中安装Ubuntu来连接Windows本地安装的数据库,先将操作过程和遇到的问题进行梳理总结 ...
- Social Networ
http://hansheng.xiong99.com.cn/ Paper:Dynamic Networks in Large Financial and Economic Systems
- Python isinstance() 函数 Python 内置函数 Python 内置函数
描述 isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type(). isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关 ...
- apiserver源码分析——启动流程
前言 apiserver是k8s控制面的一个组件,在众多组件中唯一一个对接etcd,对外暴露http服务的形式为k8s中各种资源提供增删改查等服务.它是RESTful风格,每个资源的URI都会形如 / ...
- 突破GD渲染的图片马
<?php /* The algorithm of injecting the payload into the JPG image, which will keep unchanged aft ...
- Java程序的种类
Java程序的种类 Application:Java应用程序,是可以由Java解释器直接运行的程序. Applet:即Java小应用程序,是可随网页下载到客户端由浏览器解释执行的Java程序. Ser ...
- Linux 下 xargs 命令
xargs 常常被大家忽略的一个命令,对它的一些用法很多人可能不熟悉,其实它是一个功能强大的命令,特别是在结合管道进行批量处理方面 语法 xargs 语法格式如下 xargs [OPTION]... ...
- .NET Reflector软件破解
转自:https://blog.csdn.net/zxy13826134783/article/details/89057871 软件和注册机下载地址: 链接:https://pan.baidu.co ...
- 洛谷4234最小差值生成树 (LCT维护生成树)
这也是一道LCT维护生成树的题. 那么我们还是按照套路,先对边进行排序,然后顺次加入. 不过和别的题有所不同的是: 在本题中,我们需要保证LCT中正好有\(n-1\)条边的时候,才能更新\(ans\) ...
- Hadoop集群的配置(一)
摘要: hadoop集群配置系列文档,是笔者在实验室真机环境实验后整理而得.以便随后工作所需,做以知识整理,另则与博客园朋友分享实验成果,因为笔者在学习初期,也遇到不少问题.但是网上一些文档大多互相抄 ...