はじめに
Djangoのフォームクラスには、入力データを効率的に検証し、安全に取り扱うための便利な機能が多数用意されています。その中でも、cleaned_data
はフォームのバリデーションが通過したデータを扱う際に不可欠なプロパティです。本記事では、cleaned_data
の仕組みや使用方法を具体例を交えて解説します。
cleaned_data
の仕組み
基本の動作
-
概要:
cleaned_data
はDjangoのフォームクラスが提供するプロパティで、フォームのバリデーションが成功した後に利用できます。 -
アクセス方法:
メソッドではなくプロパティとして提供されるため、cleaned_data
に直接アクセスします(例:form.cleaned_data
)。 -
データ形式:
フィールド名をキー、バリデーション済みのデータを値とした辞書形式でデータを提供します。
使用条件と動作の流れ
-
バリデーションの実行:
-
is_valid()
メソッドを呼び出すことで、フォームのバリデーションが実行されます。 - すべてのフィールドがバリデーションを通過した場合、
cleaned_data
にデータが格納されます。
-
-
バリデーション成功後に利用:
-
is_valid()
がTrue
を返した場合にのみ、cleaned_data
が利用可能です。 - フォームが無効な場合(
is_valid()
がFalse
)、cleaned_data
は空の状態となり、データを取得できません。
-
基本例
以下は、cleaned_data
を使った基本的な例です。
filters = search_form.cleaned_data
このコードでは、フォームでバリデーションが通過したデータをfilters
に格納しています。この辞書にはすべてのフィールド名がキーとして含まれ、値としてそのフィールドのデータが格納されます。
cleaned_data
とis_valid
の関係
-
is_valid
の役割:- フォームデータのバリデーションを実行。
- バリデーション結果が
True
であれば、cleaned_data
が利用可能。
-
cleaned_data
の役割:- バリデーションが成功した後、各フィールドの安全なデータを提供。
使用例
if search_form.is_valid():
# バリデーションが成功した場合のみ、cleaned_dataを利用
filters = search_form.cleaned_data
project_name = filters["project_name"]
print(project_name) # フォームで入力された「project_name」の値を出力
具体例:フィールドデータの取得
以下は、フォームデータから特定のフィールド値を取得する具体例です。
コード例
# フォームがバリデーションを通過したら
if search_form.is_valid():
# cleaned_dataからフィルタ条件を取得
filters = search_form.cleaned_data
# フィールド値の取得
project_name = filters["project_name"]
start_date = filters["start_date"]
# 取得したデータを利用
print(f"Project: {project_name}, Start Date: {start_date}")
動作イメージ
- フォームの
is_valid()
メソッドを呼び出し、バリデーションを実行。 - 成功時に、
cleaned_data
からproject_name
やstart_date
の値を取得。 - 取得した値を利用してクエリの絞り込みや、他の処理に活用。
注意点
-
is_valid()
を必ず呼び出す:- バリデーションが成功する前に
cleaned_data
にアクセスすると、例外が発生します。
- バリデーションが成功する前に
-
安全なデータのみ格納:
- バリデーション済みデータのみが
cleaned_data
に含まれるため、不正データの混入を防ぎます。
- バリデーション済みデータのみが
まとめ
Djangoのcleaned_data
は、フォームデータを安全に取得し、活用するための基本プロパティです。バリデーションが成功した後に利用可能で、辞書形式でデータにアクセスできます。is_valid()
と組み合わせて使用することで、フォームの入力データを効率的かつ安全に取り扱うことが可能です。