0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Djangoフォームの`cleaned_data`を理解する

Posted at

はじめに

Djangoのフォームクラスには、入力データを効率的に検証し、安全に取り扱うための便利な機能が多数用意されています。その中でも、cleaned_dataはフォームのバリデーションが通過したデータを扱う際に不可欠なプロパティです。本記事では、cleaned_dataの仕組みや使用方法を具体例を交えて解説します。

cleaned_dataの仕組み

基本の動作

  • 概要:
    cleaned_dataはDjangoのフォームクラスが提供するプロパティで、フォームのバリデーションが成功した後に利用できます。
  • アクセス方法:
    メソッドではなくプロパティとして提供されるため、cleaned_dataに直接アクセスします(例: form.cleaned_data)。
  • データ形式:
    フィールド名をキー、バリデーション済みのデータを値とした辞書形式でデータを提供します。

使用条件と動作の流れ

  1. バリデーションの実行:

    • is_valid()メソッドを呼び出すことで、フォームのバリデーションが実行されます。
    • すべてのフィールドがバリデーションを通過した場合、cleaned_dataにデータが格納されます。
  2. バリデーション成功後に利用:

    • is_valid()Trueを返した場合にのみ、cleaned_dataが利用可能です。
    • フォームが無効な場合(is_valid()False)、cleaned_dataは空の状態となり、データを取得できません。

基本例

以下は、cleaned_dataを使った基本的な例です。

filters = search_form.cleaned_data

このコードでは、フォームでバリデーションが通過したデータをfiltersに格納しています。この辞書にはすべてのフィールド名がキーとして含まれ、値としてそのフィールドのデータが格納されます。

cleaned_datais_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}")

動作イメージ

  1. フォームのis_valid()メソッドを呼び出し、バリデーションを実行。
  2. 成功時に、cleaned_dataからproject_namestart_dateの値を取得。
  3. 取得した値を利用してクエリの絞り込みや、他の処理に活用。

注意点

  1. is_valid()を必ず呼び出す:

    • バリデーションが成功する前にcleaned_dataにアクセスすると、例外が発生します。
  2. 安全なデータのみ格納:

    • バリデーション済みデータのみがcleaned_dataに含まれるため、不正データの混入を防ぎます。

まとめ

Djangoのcleaned_dataは、フォームデータを安全に取得し、活用するための基本プロパティです。バリデーションが成功した後に利用可能で、辞書形式でデータにアクセスできます。is_valid()と組み合わせて使用することで、フォームの入力データを効率的かつ安全に取り扱うことが可能です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?