当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Django Form.cleaned_data用法及代码示例


本文介绍 django.forms.Form.cleaned_data 的用法。

声明

Form.cleaned_data

Form 类中的每个字段不仅负责验证数据,还负责 “cleaning” it - 将其规范化为一致的格式。这是一个很好的函数,因为它允许以多种方式输入特定字段的数据,始终产生一致的输出。

例如, DateField 将输入规范化为 Python datetime.date 对象。无论您是否将格式为 '1994-07-15' 的字符串、datetime.date 对象或许多其他格式的字符串传递给它,只要它有效,DateField 将始终将其规范化为 datetime.date 对象。

使用一组数据创建 Form 实例并对其进行验证后,您可以通过其 cleaned_data 属性访问干净的数据:

>>> data = {'subject': 'hello',
...         'message': 'Hi there',
...         'sender': 'foo@example.com',
...         'cc_myself': True}
>>> f = ContactForm(data)
>>> f.is_valid()
True
>>> f.cleaned_data
{'cc_myself': True, 'message': 'Hi there', 'sender': 'foo@example.com', 'subject': 'hello'}

请注意,任何基于文本的字段——例如CharFieldEmailField——总是将输入清理为字符串。我们将在本文档后面介绍编码含义。

如果您的数据确实 not 验证,则 cleaned_data 字典仅包含有效字段:

>>> data = {'subject': '',
...         'message': 'Hi there',
...         'sender': 'invalid email address',
...         'cc_myself': True}
>>> f = ContactForm(data)
>>> f.is_valid()
False
>>> f.cleaned_data
{'cc_myself': True, 'message': 'Hi there'}

cleaned_data 将始终 only 包含在 Form 中定义的字段的键,即使您在定义 Form 时传递了额外的数据。在这个例子中,我们将一堆额外的字段传递给 ContactForm 构造函数,但 cleaned_data 只包含表单的字段:

>>> data = {'subject': 'hello',
...         'message': 'Hi there',
...         'sender': 'foo@example.com',
...         'cc_myself': True,
...         'extra_field_1': 'foo',
...         'extra_field_2': 'bar',
...         'extra_field_3': 'baz'}
>>> f = ContactForm(data)
>>> f.is_valid()
True
>>> f.cleaned_data # Doesn't contain extra_field_1, etc.
{'cc_myself': True, 'message': 'Hi there', 'sender': 'foo@example.com', 'subject': 'hello'}

Form 有效时,cleaned_data 将包含 all 其字段的键和值,即使数据不包含某些可选字段的值。在此示例中,数据字典不包含 nick_name 字段的值,但 cleaned_data 包含它,但值为空:

>>> from django import forms
>>> class OptionalPersonForm(forms.Form):
...     first_name = forms.CharField()
...     last_name = forms.CharField()
...     nick_name = forms.CharField(required=False)
>>> data = {'first_name': 'John', 'last_name': 'Lennon'}
>>> f = OptionalPersonForm(data)
>>> f.is_valid()
True
>>> f.cleaned_data
{'nick_name': '', 'first_name': 'John', 'last_name': 'Lennon'}

在上面的示例中,nick_namecleaned_data 值设置为空字符串,因为 nick_nameCharField ,并且 CharField 将空值视为空字符串。每个字段类型都知道它的 “blank” 值是什么 - 例如,对于 DateField ,它是 None 而不是空字符串。有关在这种情况下每个字段行为的完整详细信息,请参阅下面“内置 Field 类”部分中每个字段的 “Empty value” 注释。

您可以编写代码来对特定表单字段(基于它们的名称)或整个表单(考虑各种字段的组合)执行验证。有关这方面的更多信息,请参见表单和字段验证。

相关用法


注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.forms.Form.cleaned_data。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。