Form包含各类字段(Field),每一个Field也是一个类,每一个Field包含一个widget的类,用来控制html元素的展现个属性等.html
Formpython
全部的Form都做为django.forms.Form 的子类建立django
form.is_bound 返回当前表单是否已绑定数据api
hidden_fields() visible_fields() 分别返回全部隐藏的列和可见的列app
每一个Field都会根据字段类型对应一个默认的类,也能够手动指定widget的值来更改默认widget类,以下ide
name=forms.CharField(label='名称'max_length=200,widget=forms.TextInput(attrs={'class':'form-control'}))
widget.attrs 测试
html属性的一个字典 #{'class': 'form-control', 'required': 'required'}ui
无论表单提交的是什么数据,一旦经过调用is_valid() 成功验证(is_valid() 返回True),验证后的表单数据将位于form.cleaned_data 字典中。这些数据已经为你转换好为Python 的类型。this
注编码
此时,你依然能够从request.POST 中直接访问到未验证的数据,可是访问验证后的数据更好一些。
手动渲染时要加上non_field_errors这个错误信息.
{{ form.non_field_errors }}
<div class="fieldWrapper"> {{ form.subject.errors }} <label for="{{ form.subject.id_for_label }}">Email subject:</label> {{ form.subject }}</div>
field 中有用的属性
`field`.`get_XXX_display` #xx指字段名.
当定义的字段为关系字段,选择字段,bool等等,
django会自动生成一个get_xx_display的方法来生成这些字段的展现数据.
is_end_state = models.SmallIntegerField('是否', default=0,choices=[(0,'否'),(1,'是')])
is_end_state = models.SmallIntegerField('是否', default=0,choices=[(0,'否'),(1,'是')])
当字段类型为CharField时使用get_xx_display,获取到的值为自己,
直接打印出来为0或者1,使用get_xx_display打印出来则为定义字段时的则为是/否
{{ field.label }}
字段的label,例如Email address。
{{ field.label_tag }}
包含在HTML <label> 标签中的字段Label。它包含表单的label_suffix。例如,默认的label_suffix 是一个冒号:
<label for="id_email">Email address:</label>
{{ field.id_for_label }}
用于这个字段的ID(在上面的例子中是id_email)。若是你正在手工构造label,你可能想使用它代替label_tag。若是你有一些内嵌的JavaScript 而且想避免硬编码字段的ID,这也是有用的。
{{ field.value }}
字段的值,例如someone@example.com。
{{ field.html_name }}
输入元素的name 属性中将使用的名称。它将考虑到表单的前缀。
{{ field.help_text }}
与该字段关联的帮助文档。
{{ field.errors }}
输出一个<ul class="errorlist">,包含这个字段的验证错误信息。你可使用{% for error in field.errors %}自定义错误的显示。 这种状况下,循环中的每一个对象只是一个包含错误信息的简单字符串。
{{ field.is_hidden }}
若是字段是隐藏字段,则为True,不然为False。做为模板变量,它不是颇有用处,可是能够用于条件测试,例如:
{% if field.is_hidden %} {% endif %}
{{ field.field }}
表单类中的Field 实例,经过BoundField 封装。你可使用它来访问Field 属性,例如{% char_field.field.max_length %}。