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`を発生させています。