一、表单常用的属性
大部分的类是继承Field
所以大部分的标签都有公共的属性
-
use_required_attribute
去除浏览器的判断属性,在form表单类生命
class TestForm(forms.Form):
use_required_attribute = False
-
代码展示
class TestForm(forms.Form):
use_required_attribute = False
user = fields.CharField(
max_length=12,#最大长度
min_length=12,#最小长度
#empty_value = "111",
required = True, # 是否必须填
error_messages={},#错误信息
#widget = widgets.Select(),#定义HTML插件
#widget = widgets.Select(attrs={'class':'tss'}),#加属性
label='用户名' ,#定义label标签显示内容 使用方法:{{ obj.user.label }}
#initial='xx',#设置默认值,在input默认展示值
help_text='帮助文档',#在html 后显示文字 使用方法{{ obj.user.help_text }}
show_hidden_initial= True, # 生成一个隐藏的文本框用来记录 <input type="hidden" name="initial-user" value="xx" id="initial-id_user">
#validators=[],#自定义验证规则
#localize = Flase, #是否支持本地化
# disabled=True, #是否可编辑,默认Flase 可编辑
#label_suffix=':'#在调用as_p as_table 等时在 label加符号,如果没设置lable 就默认字段
)
-
required 是否必须填
判断表单内容是否可以为空
-
error_messages参数让你覆盖字段引发的异常中的默认信息
判断覆盖k和设置字段一一对应,例如上面的required
判断是否为空 {'required': '不能为空', 'invalid': '格式错误'}
,使用的写法
name = forms.CharField(error_messages={'required': 'Please enter your name'})
-
label
定义label标签显示内容 使用方法:{{ obj.user.label }}
-
initial
initial='xx'
,#设置默认值,在input默认展示值,也可传入对象initial=datetime.date.today
,在未绑定表达使用,比在绑定表单时get请求时,传入的字典,不会触发form表单判断机制
-
widget
widget = widgets.Select()
,#定义HTML插件
widget = widgets.Select(attrs={'class':'tss'})
,#加属性
-
help_text
help_text='帮助文档'
,#在html 后显示文字 使用方法{{ obj.user.help_text }}
-
validators自定义验证规则
-
localize是否支持本地化
-
disabled是否可编辑
disabled=True
, #是否可编辑,默认Flase 可编辑
-
label_suffix
label_suffix=':'
#在调用as_p as_table 等时在 label加符号,如果没设置lable 就默认字段
-
show_hidden_initia
show_hidden_initial= True
, # 生成一个隐藏的文本框用来记录<input type="hidden" name="initial-user" value="xx" id="initial-id_user">
二、常用的标签字段
-
CharField 文本判断
-
max_length,min_length,strip,empty_value
- 默认的Widget:
TextInput
- 空值:与
empty_value
给出的任何值。 - 规范化为:一个Unicode 对象。
- 如果提供,验证
max_length
或min_length
。 否则,所有的输入都是合法的。 - 错误信息的键:
min_length
,max_length
,required
-
IntegerField 数字判断
-
max_value=12,#最大数,min_value=6,#最小数
age = fields.IntegerField(
max_value=12,#最大数
min_value=6,#最小数)
- 默认的Widget:当
Field.localize
是False
时为NumberInput
,否则为TextInput
。 - 空值:
None
- 规范化为:一个Python 整数或长整数。
- 验证给定值是一个整数。 允许前导和尾随空格,如Python的
int()
函数。 - 错误信息的键:
max_value
,invalid
,required
,min_value
-
DecimalField小数判断
max_value最大值
min_value
max_digits总长度
decimal_places小数位长度
- 默认的Widget:当
Field.localize
是False
时为NumberInput
,否则为TextInput
。 - 空值:
None
- 规范化为:一个Python
decimal
。 - 验证给定的值为一个十进制数。 忽略前导和尾随的空白。
- 错误信息的键:
max_whole_digits
,max_digits
,max_decimal_places
,max_value
,invalid
,required
,min_value
-
FloatField 小数判断
- 默认的Widget:当
Field.localize
是False
时为NumberInput
,否则为TextInput
。 - 空值:
None
- 规范化为:一个Float 对象。
- 验证给定的值是一个浮点数。 和Python 的
float()
函数一样,允许前导和尾随的空白符。 - 错误信息的键:
max_value
,invalid
,required
,min_value
接收两个可选的参数用于验证,max_value
和min_value
。 它们控制字段中允许的值的范围。
-
EmailField邮箱判断
-
max_length ,min_length
- 默认的Widget:
EmailInput
- 空值:
''
(一个空字符串) - 规范化为:一个Unicode 对象。
- 验证给出的值是一个合法的邮件地址,使用一个适度复杂的正则表达式。
- 错误信息的键:
required
,invalid
具有两个可选的参数用于验证,max_length
和min_length
。 如果提供,这两个参数将确保字符串的最大和最小长度。
-
ChoiceField下拉框
choices=[(1,'大连'),(2,"北京")] 下拉展示
initial=2 ,#默认展示选择
chicecity = fields.ChoiceField(
#后台将接受的value都是字符串
choices=[(1,'大连'),(2,"北京")] ,#下拉展示
initial=2 ,#默认展示选择
required=True, #是否必填
widget = None, #插件,默认select插件
label = None, #Label内容
)
- 默认的Widget:
Select
- 空值:
''
(一个空字符串) - 规范化为:一个Unicode 对象。
- 验证给定的值在选项列表中存在。
- 错误信息的键:
required
,invalid_choice
-
TypedChoiceField下拉框类型转换
typechi = fields.TypedChoiceField(
choices=[(1, '大连'), (2, "北京")],
coerce=lambda x: int(x),
#对选中的值进行一次转换
initial = '1',
#空值的默认值
)
- 默认的Widget:
Select
- 空值:与
empty_value
给出的任何值。 - 规范化为:
coerce
参数类型的值。 - 验证给定的值在选项列表中存在并且可以被强制转换。
- 错误信息的键:
required
,invalid_choice
-
MultipleChoiceField多选判断
multchic = fields.MultipleChoiceField(
# 后台将接受的value都是字符串
choices=[(1, '大连'), (2, "北京")], # 下拉展示
initial=2, # 默认展示选择
required=True, # 是否必填
widget=None, # 插件,默认select插件
label=None, # Label内容
)
- 默认的Widget:
SelectMultiple
- 空值:
[]
(一个空列表) - 规范化为:一个Unicode 对象列表。
- 验证给定值列表中的每个值都存在于选择列表中。
- 错误信息的键:
invalid_list
,invalid_choice
,required
-
Datetime 年月日显示
Datetime = fields.DateField(
#格式要求:2018-02-25
)
- 默认的Widget:
DateInput
- 空值:
None
- 规范化为:一个Python
datetime.date
对象。 - 验证给出的值是一个
datetime.date
、datetime.datetime
或指定日期格式的字符串。 - 错误信息的键:
required
,invalid
-
TypedMultipleChoiceField 多选类型转
- 默认的Widget:
SelectMultiple
- 空值:
empty_value
- 规范化为:
coerce
参数提供的类型值列表。 - 验证给定值存在于选项列表中并且可以强制。
- 错误信息的键:
required
,invalid_choice
-
DateTimeField年月日时分秒
DateTimeTime = fields.DateTimeField(
# 格式要求:2018-02-25 11:25)
- 默认的Widget:
DateTimeInput
- 空值:
None
- 规范化为:一个Python
datetime.datetime
对象。 - 验证给出的值是一个
datetime.datetime
、datetime.date
或指定日期格式的字符串。 - 错误信息的键:
required
,invalid
-
TimeField时分显示
Timetime = fields.TimeField(
# 格式要求:11:25
)
- 默认的Widget:
TextInput
- 空值:
None
- 规范化为:一个Python 的
datetime.time
对象。 - 验证给定值是
datetime.time
或以特定时间格式格式化的字符串。 - 错误信息的键:
required
,invalid
-
DurationField时间间隔
duratime = fields.DurationField(
#时间间隔
)
- 默认的Widget:
TextInput
- 空值:
None
- 规范化为:一个Python
timedelta
。 - 验证给出的值是一个字符串,而可以给转换为
timedelta
。 - 错误信息的键:
required
,invalid
.
接收任何可以被parse_duration()
理解的格式。
-
文件判断FileField
fielFile = fields.FileField(
allow_empty_file = False #是否允许空文件
)
- 默认的Widget:
ClearableFileInput
- 空值:
None
- 规范化为:一个
UploadedFile
对象,它封装文件内容和文件名为一个单独的对象。 - 可以验证非空的文件数据已经绑定到表单。
- 错误信息的键:
missing
,invalid
,required
,empty
,max_length
-
ImageField 图片判断
image = fields.ImageField(
#注:需要PIL模块,pip3 install Pillow
#以上两个字典使用时,需要注意两点:
#- form表单中
#enctype = "multipart/form-data"
#- view函数中
# obj = MyForm(request.POST, request.FILES)
)
- 默认的Widget:
ClearableFileInput
- 空值:
None
- 规范化为:一个
UploadedFile
对象,它封装文件内容和文件名为一个单独的对象。 - 验证文件数据已绑定到表单,并且该文件具有Pillow理解的图像格式。
- 错误信息的键:
missing
,invalid
,required
,empty
,invalid_image
-
RegexField 自定义
rege = fields.RegexField(
regex="",#自定义判断的正则表达式
max_length="22",
min_length="33",
)
- 默认的Widget:
TextInput
- 空值:
''
(一个空字符串) - 规范化为:一个Unicode 对象。
- 验证给定值与某个正则表达式匹配。
- 错误信息的键:
required
,invalid
-
URLfield 网址判断
- 默认的Widget:
URLInput
- 空值:
''
(一个空字符串) - 规范化为:一个Unicode 对象。
- 验证给定值是有效的URL。
- 错误信息的键:
required
,invalid
三、select/checkbox/radio
-
select 除了使用提供的,还以用CharField自定制
只适合单选也可以用下面的CharField,返回字符串,因为定制属性
xbd = fields.CharField(
widget = widgets.Select(choices=[(1,"鸟")])
)
也可以用下面的CharField,返回数字
xbd = fields.IntegerField(
widget=widgets.Select(choices=[(1, "鸟")])
)
-
Checkbox
单选时设置value属性
xbd = fields.CharField(
widget = widgets.CheckboxInput({'value':'1'})
)
多选时
xdb = fields.MultipleChoiceField(
initial=[2,],
choices=[(1, '大连'), (2, "北京")],
widget=widgets.CheckboxSelectMultiple
)
-
radio
单radio,值为字符串
user = fields.CharField(
initial=2,
widget=widgets.RadioSelect(choices=((1,'上海'),(2,'北京'),))
)
单radio,值为字符串
user = fields.ChoiceField(
choices=((1, '上海'), (2, '北京'),),
initial=2,
widget=widgets.RadioSelect
)
-
设置select 实时读取数据库内容
class tupdata(forms.Form):
def __init__(self,*args,**kwargs):
super(tupdata,self).__init__(*args,**kwargs)
self.fields['xdb'].widget.choices = models.UserInfo.objects.values_list('id','usernmae')
xdb = fields.CharField(
widget =widgets.Select(),
label = "111",
)
def test_updata(reuqest):
obj = tupdata()
return render(reuqest,"test1.html",{'obj1':obj})