【django】 formのcleaned_dataの記述てなに?

Django

formでときどき使うcleaned_dataについて書きました。
意外と便利なやつです。

cleaned_dataとは?

formの中で validate された後、つまり検証されてた後
適切なデータとして確認された後のデータが入る変数

こんなつらつら書いても分からないですよね。
つまり、フォームの処理で考えるとこんな感じです。

  • forms.pyでフォームを作成
  • フォームにデータを入力
  • 入力データをバリデート(validate)する
    →is_valid()として書かれる
     ここでデータがフォームに適切か判断
  • 適切だった場合、cleaned_dataに入る

のここです。

cleaned_dataの注意事項

このcleaned_dataはバリデートした後のデータしか入りません。

そのため、注意が必要です。

もし、バリデートしてない場合、cleaned_dataには何も入りません。

また、バリデートして一部が不適切としてはじかれた場合
はじかれた一部のデータはcleaned_dataには入りません。

はじかれずに適切とされたデータのみcleaned_dataに入ることになります。

cleaned_dataの例

例えば、cleaned_dataを調べる為、forms.pyには以下のフォームが入ってるとします。

from django import forms

class TestForm(forms.Form):
    Name = forms.CharField()
    Age = forms.IntegerField()

Nameは文字列を入れるフィールドであり、空白を入れるとFalseが出力されます。

またAgeは整数を入れるフィールドです。

ここから3つのデータを入れてcleaned_dataがどのような出力を出すかを比較します。

data1 = { "Name" : "John", "Age" : 20}
data2 = { "Name" : "Mike", "Age": "Nodata"}
data3 = { "Name" : "", "Age" : 20}

これらをTestFormに入れてみます。

ここからはインタラクティブモード(対話モード)で進めます。

python manage.py shell #インタラクティブへの変更コマンド
from forms import TestForm

data1 = { "Name" : "John", "Age" : 20}
data2 = { "Name" : "Mike", "Age": "Nodata"}
data3 = { "Name" : "", "Age" : 20}

f1 = TestForm(data1)
f1.is_valid()
>> True
f1.cleaned_data
>>{'Name': 'John', 'Age': 20}

f2 = TestForm(data2)
f2.is_valid()
>> False
f2.cleaned_data
>>{‘Name': 'Mike'}

f3= TestForm(data3)
f3.is_valid()
>> False
f3.cleaned_data
>>{'Age': 20}

data1はバリデート後、Trueを出力し、適切な値がcleaned_dataに入っています。

data2はバリデートするとFalseがでてきます。
これはdata2の”age”が適切ではないためです。
そのため、cleaned_dataには”Name”しか入っていません。

Data3もdata2と同様に、バリデート後は”Name”に適切な値がないためFalseです。
cleaned_dataには”Age”しか入っていません。

cleaned_dataのまとめ

それぞれの入力データからcleaned_dataには
バリデート後に適切と判断されたデータが入ります。

結論として、cleaned_dataにはformの中で 検証された後
適切なデータとして確認されたデータが入ります。

参考元

タイトルとURLをコピーしました