當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。