类创建字段 使用参数
Field函数
required=True, 是否允许为空
widget=None, HTML插件
label=None, 用于生成Label标签或显示内容
initial=None, 初始值
help_text='', 帮助信息(在标签旁边显示)
error_messages=None, 错误信息 {'required': '不能为空', 'invalid': '格式错误'}
show_hidden_initial=False, 是否在当前插件后面再加一个隐藏的且具有默认值的插件(可用于检验两次输入是否一直)
validators=[], 自定义验证规则
localize=False, 是否支持本地化
disabled=False, 是否可以编辑
label_suffix=None Label内容后缀
(正则匹配实现)
ChoiceField # 下拉框 单选
MultipleChoiceField # 下拉框 多选
CharField # 字符串
IntegerField # 整型
DecimalField # 浮点数设置 总长度 小数点后位数
DateField # 时间类型 格式:2015-09-01
DateTimeField #格式:2015-09-01 11:12
EmailField # 电子邮件格式
GenericIPAddressField # ipRegexField # 自定义正则匹配
CharField(Field)
max_length=None, 最大长度
min_length=None, 最小长度
strip=True 是否移除用户输入空白
IntegerField(Field)
max_value=None, 最大值
min_value=None, 最小值
DecimalField(IntegerField)
max_value=None, 最大值
min_value=None, 最小值
max_digits=None, 总长度
decimal_places=None, 小数位长度
BaseTemporalField(Field)
input_formats=None 时间格式化
DateField(BaseTemporalField) 格式:2015-09-01
TimeField(BaseTemporalField) 格式:11:12
DateTimeField(BaseTemporalField)格式:2015-09-01 11:12
DurationField(Field) 时间间隔:%d %H:%M:%S.%f
...
RegexField(CharField)
regex, 自定制正则表达式
max_length=None, 最大长度
min_length=None, 最小长度
error_message=None, 忽略,错误信息使用 error_messages={'invalid': '...'}
EmailField(CharField)
...
FileField(Field)
allow_empty_file=False 是否允许空文件
ImageField(FileField)
...
注:需要PIL模块,pip3 install Pillow
以上两个字典使用时,需要注意两点:
- form表单中 enctype="multipart/form-data"
- view函数中 obj = MyForm(request.POST, request.FILES)
ChoiceField(Field)
...
choices=(), 选项,如:choices = ((0,'上海'),(1,'北京'),)
required=True, 是否必填
widget=None, 插件,默认select插件
label=None, Label内容
initial=None, 初始值
help_text='', 帮助提示
ModelChoiceField(ChoiceField)
... django.forms.models.ModelChoiceField
queryset, # 查询数据库中的数据
empty_label="---------", # 默认空显示内容
to_field_name=None, # HTML中value的值对应的字段
limit_choices_to=None # ModelForm中对queryset二次筛选
GenericIPAddressField
protocol='both', both,ipv4,ipv6支持的IP格式
unpack_ipv4=False 解析ipv4地址,如果是::ffff:192.0.2.1时候,可解析为192.0.2.1, PS:protocol必须为both才能启用
SlugField(CharField) 数字,字母,下划线,减号(连字符)
...
UUIDField(CharField) uuid类型
了解(设置样式时会很麻烦)
注意:依赖models中的str方法
# 自定制插件 页面显示
# widget = widgets.TextInput(attrs={'class':'cls'}) input框添加类
# 下拉框三种写法 多选
from django.forms import widgets
f = fields.CharField(
widget=widgets.Select(choices=[(1,'上海'),(2,'北京')])
)
w = fields.IntegerField(
widget = widgets.Select(choices=[(1,'上海'),(2,'北京')])
)
x = fields.ChoiceField(
choices=[(1,'上海'),(2,'北京')],
)
# 单radio,值为字符串
city = fields.CharField(
initial=2,
widget=widgets.RadioSelect(choices=((1,'上海'),(2,'北京'),))
)
# 单radio,值为字符串
city = fields.ChoiceField(
choices=((1, '上海'), (2, '北京'),),
initial=2,
widget=widgets.RadioSelect
)
# 单select,值为字符串
city = fields.CharField(
initial=2,
widget=widgets.Select(choices=((1,'上海'),(2,'北京'),))
)
# 单select,值为字符串
city = fields.ChoiceField(
choices=((1, '上海'), (2, '北京'),),
initial=2,
widget=widgets.Select
)
# 多选select,值为列表
city = fields.MultipleChoiceField(
choices=((1,'上海'),(2,'北京'),),
initial=[1,],
widget=widgets.SelectMultiple
)
# 单checkbox
city = fields.CharField(
widget=widgets.CheckboxInput()
)
# 多选checkbox,值为列表
city = fields.MultipleChoiceField(
initial=[2, ],
choices=((1, '上海'), (2, '北京'),),
widget=widgets.CheckboxSelectMultiple
)
数据源实时更新
from app01 import models
from django import forms
from django.forms import fields,widgets
class Users(forms.Form):
age = fields.IntegerField()
user_id = fields.IntegerField(
# widget= widgets.Select(choices=models.Users.objects.values_list('id','username'))
widget=widgets.Select(),
)
def __init__(self,*args,**kwargs):
super(Users,self).__init__(*args,**kwargs)
self.fields['user_id'].widget.choices = models.Users.objects.values_list('id','username')
def real(requset):
obj = Users()
return render(requset,'index.html',{'obj':obj}