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 定义的样式. ...
随机推荐
- 迁移appseting.json创建自定义配置中心
创建一个自定义的配置中心,将框架中各类配置,迁移至数据库,支持切换数据库,热重载. 说在前面的话 自使用.net Core框架以来,配置大多存在json文件中: [框架默认加载配置]文件为appset ...
- gRPC,爆赞
原文链接: gRPC,爆赞 gRPC 这项技术真是太棒了,接口约束严格,性能还高,在 k8s 和很多微服务框架中都有应用. 作为一名程序员,学就对了. 之前用 Python 写过一些 gRPC 服务, ...
- DL4J实战之三:经典卷积实例(LeNet-5)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- FastAPI 学习之路(七)字符串的校验
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- git GUI Clients
git GUI Clients Git 自带用于提交 (git-gui) 和浏览 (gitk) 的内置 GUI 工具,但也有一些第三方工具供寻求特定平台体验的用户使用. References Git ...
- 【UE4 C++】Tick的三种方式、异步蓝图节点
Tick的三种方式 包括 默认 Tick (Actor.Component.UMG) TimerManager 定时器 FTickableGameObject 可以写原生 Object 也可以继承UO ...
- Coursera Deep Learning笔记 序列模型(二)NLP & Word Embeddings(自然语言处理与词嵌入)
参考 1. Word Representation 之前介绍用词汇表表示单词,使用one-hot 向量表示词,缺点:它使每个词孤立起来,使得算法对相关词的泛化能力不强. 从上图可以看出相似的单词分布距 ...
- 莱特币(LTC)开发环境搭建
Linux系统下搭建莱特币LTC开发环境 1.简介 2.LTC 客户端下载 3.解压到一个固定的目录中 4.启动客户端 4.1.参数解释: 4.2.更多详细的配置 5.执行命令测试一下 6.获取莱特币 ...
- BOOST内存管理-intrusive_ptr
参考链接https://blog.csdn.net/harbinzju/article/details/6754646 intrusive_ptr 是shared_ptr的插入式版本.与shared_ ...
- python的random模块生成随机数
python的random函数 random.random() 生成0-1之间的随机数 random.uniform(a,b)生成a,b之间的浮点数 random.randint(a,b)生成a,b之 ...