一 .forms 模块的作用:
通过 froms 模块,允许将表单与class相结合,可以自动生成表单控
二. 使用步骤:
1. 创建 froms.py
2.导入froms
from django import froms
3.创建class,一个class对应一个表单,必须继承自 forms.From 类
4、在class中创建属性
一个属性对应着一个表单控件
三. 在模板中解析 form 对象
1、注意:
需要自定义<form>
需要自定义 提交按钮
2、解析方式
1、手动解析
在视图中创建 xxForm() 并发送到模板中
ex:
form = RemarkForm()
return render(request,'xx.html',locals())
手动解析:
模板中:
{% for field in form %}
{{field.label}} : 控件前的文本
{{field}} : 表示控件
{% endfor %}
2、自动解析
1、{{form.as_p}}
将表单中的每个属性都解析成一个p标记,再显示标签以及控件
2、{{form.as_ul}}
将表单中的每个属性都解析成一个li标记,再显示标签以及控件
注意:需要自定义<ul></ul> 或 <ol></ol>
3、{{form.as_table}}
将表单中的每个属性都解析成一个tr标记,再显示标签以及控件
注意:需要自定义<table>
实例代码:
forms.py
from django import forms
from .models import *
# 为topic下拉列表初始化一组数据
TOPIC_CHOICE = (
('level1', '好评'),
('level2', '中评'),
('level3', '差评'),
)
class RemarkForm(forms.Form):
# label 表示控件前面的文本
# initia 表示初始化的数据 等同于控件的 value
subject = forms.CharField(label='标题', initial='初始数据')
# 创建email属性,表示邮箱显示email控件
# label 表示控件前面的文本
email = forms.EmailField(label='邮箱')
# 创建message属性,表示评论的内容显示成多行文本域
message = forms.CharField(label='内容', widget=forms.Textarea)
# 创建 topic属性表示评论级别 ,显示成一个下拉列表
# choices 指定下拉列表的数据们
topic = forms.ChoiceField(label='评价', choices=TOPIC_CHOICE)
# 创建isSave 属性 表示是否保存 显示成一个复选框
isSave = forms.BooleanField(label='是否保存')
upwd = forms.CharField(label='密码:', widget=forms.PasswordInput)
# 创建一个RegisterFrom类(方式一)
# class RegisterFrom(forms.Form):
# uname = forms.CharField(label='注册用户名:', widget=forms.TextInput)
# upwd = forms.CharField(label='密码:', widget=forms.PasswordInput)
# uemail = forms.EmailField(label='邮箱:',widget=forms.EmailInput)
# uage = forms.IntegerField(label='年龄')
# 表单的高级用法(方式二)
class RegisterFrom(forms.ModelForm):
class Meta:
model = RegisterUser
fields = "__all__" # __all__ 可以把models文件类中的属性的全部全部映射
# labels 中的键需要和models文件中对应类的属性名需要一致才可以映射出对应的值, 如果不一致 会映射出数据表的字段名,相当于models文件类的属性名
labels = {
'name': '用户名称',
'password': '用户密码',
'email': "用户邮箱",
'age': '用户年龄',
'isActive': '是否激活',
}
models.py
# 注册用户表
class RegisterUser(models.Model):
name = models.CharField(max_length=150)
age = models.IntegerField(default=0)
email = models.EmailField(default=True)
password = models.CharField(max_length=30)
isActive = models.BooleanField(default=True)