Form组件: Form组件是来规定前端用户输入数据的类型,并供视图函数做验证
作用: 1. 定制生成form表单的HTML标签,限定格式
如text, password, checkbox, radio, file(上传文件) | select, textarea(文本域)
2. 验证输入信息是否符合格式
3. 验证后, 可以保留form表单上次提交的信息(form提交后会刷新)
4. 初始化form表单的内容
用法:
1. 定制form表单类,相当于创建用于前端交互的model类,要注意格式与后端相同
class MyForm(forms.From):
field_name = fields.Field(
attr = value
)
Field 是一个类,用来限制输入的数据类型
/******** 能直接匹配后端的 ************/
CharField(Field): max_length, min_length, strip = True
IntegerField(Field): max_value, min_value
FloatField(IntegerField): 同上
DecimalField(IntegerField): 同上, max_digits(总长度), decimal_places(小数位长度)
DateField(BaseTemporalField) 格式:2015-09-01
DateTimeField(BaseTemporalField) 格式:2015-09-01 11:12
URLField(Field)
EmailField(CharField)
BooleanField(Field)
/********** 用于前端的 *****************/
RegexField(CharField): regex(正则表达式), max_length,min_length
ChoiceField(Field): choices = ((0,'上海'),(1,'北京'),) # 选择框,也可以用插件定制
Field字段参数的作用:
1. 限制数据: required=True # 默认不能为空
initial # 初始值
disabled # 只读
2. 用于显示: label # 输入框名称
help_text # 帮助信息
show_hidden_initial # ?????????
3. html插件: widget = widgets.标签类型
用于定制html的类型: 输入框(text,password, check, radio)
选择框(select)
常用插件: 插件也是一个类,可通过attrs={'id':'i1','class':'c1'}定义标签属性
TextInput(Input)
PasswordInput(TextInput)
CheckboxInput 选中返回'on'
选择框: 选项: choices = ((0,'上海'),(1,'北京'),) 可通过插件内部属性或ChoiceField设定
初始值: initial = 1(单选) 或 [1,](多选)
RadioSelect 单选
Select 单选
SelectMultiple 多选
CheckboxSelectMultiple 多选
对于选择框的数据库实时更新:
1>. 将更新操作写入__init__(self)函数,
因为field字段是静态属性,只会加载一次,不能实时更新;而__init__(self)函数会在每次创建对象时执行
def __init__(self,*arg,**kwargs):
super(MyForm,self).__init__(*args,**kwargs)
self.fields['field_name'].widget.choices = model.Table.all().value_list('id','name')
2> 改写model.py中的__str__方法
from django.forms import model
authors = model.ModelMultipleChoiceField(queryset=models.Table.objects.all()) //多选
authors = model.ModelChoiceField(queryset=models.Table.objects.all()) //单选
转载于:https://www.cnblogs.com/lancelotxly/p/10872444.html