本文介绍 django.forms.Form.cleaned_data
的用法。
声明
Form.cleaned_data
类中的每个字段不仅负责验证数据,还负责 “cleaning” it - 将其规范化为一致的格式。这是一个很好的函数,因为它允许以多种方式输入特定字段的数据,始终产生一致的输出。Form
例如,
将输入规范化为 Python DateField
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'}
请注意,任何基于文本的字段——例如CharField
或EmailField
——总是将输入清理为字符串。我们将在本文档后面介绍编码含义。
如果您的数据确实 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_name
的 cleaned_data
值设置为空字符串,因为 nick_name
是 CharField
,并且 CharField
将空值视为空字符串。每个字段类型都知道它的 “blank” 值是什么 - 例如,对于 DateField
,它是 None
而不是空字符串。有关在这种情况下每个字段行为的完整详细信息,请参阅下面“内置 Field
类”部分中每个字段的 “Empty value” 注释。
您可以编写代码来对特定表单字段(基于它们的名称)或整个表单(考虑各种字段的组合)执行验证。有关这方面的更多信息,请参见表单和字段验证。
相关用法
- Python Django Form.default_renderer用法及代码示例
- Python Django Form.as_p用法及代码示例
- Python Django Form.as_table用法及代码示例
- Python Django Form.is_multipart用法及代码示例
- Python Django Form.fields用法及代码示例
- Python Django Form.prefix用法及代码示例
- Python Django Form.as_ul用法及代码示例
- Python Django FormView用法及代码示例
- Python Django ForeignKey.on_delete用法及代码示例
- Python Django ForeignKey.related_name用法及代码示例
- Python Django ForeignKey.related_query_name用法及代码示例
- Python Django ForeignKey.limit_choices_to用法及代码示例
- Python Django File.save用法及代码示例
- Python Django Field.description用法及代码示例
- Python Django Feature.get用法及代码示例
- Python File next()用法及代码示例
- Python File tell()用法及代码示例
- Python Django Floor用法及代码示例
- Python Django Field.type_name用法及代码示例
- Python Django Feed.item_geometry用法及代码示例
- Python Django Feed用法及代码示例
- Python Django Field.help_text用法及代码示例
- Python File seek()用法及代码示例
- Python Django Feature.fid用法及代码示例
- Python OpenCV Filter2D()用法及代码示例
注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.forms.Form.cleaned_data。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。