1. ホーム
  2. django

[解決済み] django 上書きフォームクリーンメソッド

2022-02-16 20:07:16

質問

フォームのクリーンメソッドを上書きするとき、どのフィールドでバリデーションに失敗したかを知るにはどうしたらよいですか? 例えば、以下のフォームでクリーンメソッドを上書きする場合、どのフィールドでバリデーションに失敗したかを知るにはどうしたらよいですか?

class PersonForm(forms.Form):
    title = Forms.CharField(max_length=100)
    first_name = Forms.CharField(max_length=100)
    surname = Forms.CharField(max_length=100)
    password = Forms.CharField(max_length=100)

def clean(self, value):
    cleaned_data = self.cleaned_data

    IF THE FORM HAS FAILED VALIDATION:
        self.data['password'] = 'abc'
        raise forms.ValidationError("You have failed validation!")
    ELSE:
        return cleaned_data 

ありがとうございます。

解決方法は?

エラーディクトにエラーが追加されているかどうかを確認することができます。

def clean(self, value):
    cleaned_data = self.cleaned_data

    if self._errors:
        self.data['password'] = 'abc'
        raise forms.ValidationError("You have failed validation!")
    else:
        return cleaned_data 

ボーナス! 特定のフィールドのエラーをチェックすることができます。

def clean(self, value):
    cleaned_data = self.cleaned_data

    if self._errors and 'title' in self._errors:
        raise forms.ValidationError("You call that a title?!")
    else:
        return cleaned_data