本記事はdjangoのformにおいて
「ときどきformで使用するcleaned_dataってなに?」と疑問に思われている方に向けて
formで使うcleaned_dataについてどんなものか、使用する場面について解説しました。
意外と便利な「cleaned_data」について、この機会に知ってみてください。
cleaned_dataとは?
cleaned_dataとは、以下の通りです。
formの中で validate された後、つまり検証されてた後に、適切なデータとして確認された後のデータが入る変数がcleaned_dataである。
こんなつらつら書いても分からないですよね。
つまり、フォームの処理で考えるとこんな感じです。
- forms.pyでフォームを作成
- フォームにデータを入力
- 入力データをバリデート(validate)する
→is_valid()として書かれる
ここでデータがフォームに適切か判断 - 適切だった場合、cleaned_dataに入る
のここです。
ここの4番目で使われる変数が「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の中で 検証された後
適切なデータとして確認されたデータが入ります。
より勉強するのに必要なdjangoのおすすめ本を以下の記事で紹介しています。
また、スキルアップのために、djangoをスクールで効率よく学びたい人向けに以下の記事がおすすめです。
最近のプログラミングスクールでもdjangoは学べます。
しかも、AIとWebサイトを組み合わせる方法も教えています。