概要
前回の記事にて、choicefield を用いたバリデーションを紹介いたしました。 今回は clean メソッドを用いたバリデーションについて紹介したいと思います。
内容
clean メソッドは 2 つあります。
- clean_fields()
- 単体の field に対してバリデーションを行いたい時
- clean()
- 複数の field に対してバリデーションを行いたい時
実行順番なのですが、先に各 clean_fields()が実行され、最後に clean()が実行されます 以下コードになります
form.py
class Test(forms.Form):
userid = forms.CharField(label='ユーザID', max_length=50)
password = forms.CharField(label='パスワード', max_length=50)
def clean_userid(self):
userid = self.cleaned_data['userid']
if '@' in userid:
raise forms.ValidationError('useridに@を含めることはできません')
return userid
def clean_pw(self):
pw = self.cleaned_data['password']
if len(pw) < 10:
raise forms.ValidationError('pwは10文字以上である必要があります')
return pw
def clean(self):
pw = self.cleaned_data['password']
userid = self.cleaned_data['userid']
if pw == userid:
raise forms.ValidationError('pwとuseridは違う値にしてください')
return self.cleaned_data
clean_field
今回は field2 つ用意しました。
- 1:userid
- @がユーザ ID に入っている場合にエラーとして返す
- 2:password
- 文字列の長さが 10 文字に満たない場合にエラーとして返す
clean
上記が OK だとしても userid と password が同じ物の場合エラーとして返すように
まとめ
fields のバリデーションでは物足りない場合、独自にバリデーション内容を書きたい場合に clean はとてもいい選択だと思います 是非ご活用くださーい