Django表单API

来源:互联网 发布:算法导论第三版.pdf 编辑:程序博客网 时间:2024/06/05 17:23
-  创建表单(Form)

# 创建未绑定(unbound)表单
>>> f = ContactForm()
>>> f.is_bound
False

# 创建绑定(bound)表单

将字典数据,作为Form构造函数的第一个参数。
>>> data = {'subject': 'hello',
...         'message': 'Hi there',
...         'sender': 'foo@example.com',
...         'cc_myself': True}
>>> f = ContactForm(data)
>>> f.is_bound
True

如果你想要修改一个bound表单实例的data,或绑定一些data到一个unbound表单实例,创建另外一个Form实例。
没有方法可以修改Form实例的data。一但一个Form实例被创建,你应当将它的data视为不可变的。

- 使用Form校验数据


- 动态初始化值
使用initial在运行时动态指定form字段的值。这些值只在未绑定form中显示。
>>> f = ContactForm(initial={'subject': 'Hi there!'})

- 检查表单数据是否改变
Form.has_changed() 用于检查form数据较于initial数据是否已改变。

>>> f = ContactForm(data, initial=data)
>>> f.has_changed()
False

>>> f = ContactForm(request.POST, initial=data)
>>> f.has_changed()

>>> f = ContactForm(request.POST, initial=data)
>>> if f.has_changed():
...     print("The following fields changed: %s" % ", ".join(f.changed_data))


- 访问form的字段(fields)

# 访问
>>> for row in f.fields.values(): print(row)
...
<django.forms.fields.CharField object at 0x7ffaac632510>
<django.forms.fields.URLField object at 0x7ffaac632f90>
<django.forms.fields.CharField object at 0x7ffaac3aa050>
>>> f.fields['name']
<django.forms.fields.CharField object at 0x7ffaac6324d0>

# 修改form实例属性
>>> f.as_table().split('\n')[0]
'<tr><th>Name:</th><td><input name="name" type="text" value="instance" /></td></tr>'
>>> f.fields['name'].label = "Username"
>>> f.as_table().split('\n')[0]
'<tr><th>Username:</th><td><input name="name" type="text" value="instance" /></td></tr>'

- 访问"clean"数据
Form.cleaned_data, cleaned_data只包含Form中定义了的属性。

- 设置HTML ID属性和<label>标签

>>> f = ContactForm(auto_id=True)
<label for="subject">Subject:</label>
<input id="subject" type="text" name="subject" maxlength="100" />

>>> f = ContactForm(auto_id='id_for_%s')
<label for="id_for_subject">Subject:</label>
<input id="id_for_subject" type="text" name="subject" maxlength="100" />

>>> f = ContactForm(auto_id='id_for_%s', label_suffix=' ->')
<label for="id_for_subject">Subject -></label>


- 绑定上传文件到form表单


- form前缀 
Form.prefix 有多个form时,各自可以有不同命名空间。

>>> mother = PersonForm(prefix="mother")
>>> father = PersonForm(prefix="father")
>>> print(mother.as_ul())
<li><label for="id_mother-first_name">First name:</label> <input type="text" name="mother-first_name" id="id_mother-first_name" /></li>
>>> print(father.as_ul())
<li><label for="id_father-first_name">First name:</label> <input type="text" name="father-first_name" id="id_father-first_name" /></li>

0 0