用来验证 和 显示 生成html代码 类创建字段 使用参数
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=NoneLabel内容后缀
form 字段(用来匹配用户输入是否符合格式和设置HTML显示样式) (正则匹配实现)
ChoiceField# 下拉框 单选
MultipleChoiceField# 下拉框 多选
CharField# 字符串
IntegerField# 整型
DecimalField#浮点数设置 总长度 小数点后位数
DateField# 时间类型格式:2015-09-01
DateTimeField#格式:2015-09-01 11:12
EmailField# 电子邮件格式
GenericIPAddressField# ip
FileField# 文件上传
【form 内置字段,数据实时更新,下拉框】RegexField# 自定义正则匹配
CharField(Field)
max_length=None,最大长度
min_length=None,最小长度
strip=True是否移除用户输入空白
IntegerField(Field)
max_value=https://www.it610.com/article/None,最大值
min_value=None,最小值
DecimalField(IntegerField)
max_value=https://www.it610.com/article/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类型
form 生成 HTML 生成标签自定制添加属性 attrs={,}
文章图片
单选下拉框
文章图片
radio单选框
文章图片
单select单选下拉框
文章图片
多选select多选下拉框
文章图片
checkbox多选框
文章图片
文章图片
数据源实时更新
文章图片
了解(设置样式时会很麻烦)
文章图片
文章图片
文章图片
注意:依赖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,widgetsclass 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}
推荐阅读
- Django|Python接口自动化测试系列[V1.0.0][加密接口]
- Django (一)-DRF(DjangoRESTframework)工程搭建
- Django中新版本变动和版本不同的各种坑 (持续更新)
- xadmin|ImportError: No module named 'reversion'
- 解决django1.11与Python3.7不兼容问题
- Django中的auto_now、auto_now_add
- python|web开发之Django(七)(注册、登录、会话以及跳转个人中心)
- django版本和python版本的对应
- django中如何修改网页title和站点header?
- 关于django2中views和url已经前端模板页面的关系