cleanedメソッドとは
フォーム全体の標準的なバリデーションとは別に、特定のフィールドに対してのみ使う独自のカスタムバリデーションチェックを作りたい場合に使う

 

 

書き方

clean_<fieldname>(self)

fieldnameの部分に特定のフィールド名を記述する

 

 

フォーム全体のバリデーションとの違い

・フォームレベルのバリデーション

フォーム全体の`clean()`メソッドは、フォーム全体に関するバリデーションや複数フィールド間の依存関係のチェックに使用されます。これは、全体のデータの整合性を保証するために役立ちます。
 

・フィールドレベルのバリデーション

`clean_<fieldname>()`メソッドは、フィールドごとに細かなバリデーションルールを設定することが可能になります。



使用例
あるフォームに`start_date`と`end_date`という2つの日付フィールドがあり、`end_date`が`start_date`よりも後の日付でなければならないというルールがある場合、`clean_end_date()`メソッドを定義してこの条件を検証できます。

python
from django import forms
from django.core.exceptions import ValidationError

class MyForm(forms.Form):
    start_date = forms.DateField()
    end_date = forms.DateField()

    def clean_end_date(self):
        start_date = self.cleaned_data.get('start_date')
        end_date = self.cleaned_data.get('end_date')
        if start_date and end_date and end_date < start_date:
            raise ValidationError("終了日は開始日よりも後の日付でなければなりません。")
        return end_date

この例では、`clean_end_date()`メソッドが`end_date`フィールドに対するカスタムバリデーションを実行し、条件に違反する場合は`ValidationError`を発生させています。