Djangoのformでカスタムバリデーションをする方法

例えば会員登録とかでパスワードを確認のために2回入力してもらうときとか、両方の値があっているかチェックする必要があります。

Djangoの標準バリデーションだとそこまではやってくれないんですね。

でも、バリデーションのカスタマイズはとっても簡単です。簡単なハズなのに、とってもてこずりました。w

# -*- coding: utf-8 -*-

from django import forms

class RegistForm(forms.Form):
    name = forms.CharField(max_length=100)
    mailadd = forms.EmailField(max_length=100)
    passwd = forms.CharField(min_length=6, max_length=12, widget=forms.PasswordInput(render_value=False))
    passwd_confirm = forms.CharField(min_length=6, max_length=12, widget=forms.PasswordInput(render_value=False))

    def clean_passwd_confirm(self):
        _pswd = self.cleaned_data[‘passwd’]
        _pswd_confirm = self.cleaned_data[‘passwd_confirm’]
        if _pswd!=_pswd_confirm:
            raise forms.ValidationError(u’確認用パスワードが異なります。’)
        else:
            return _pswd_confirm

clean_フィールド名のメソッドが、対象フィールドのバリデーション用メソッドです。self.cleand_dataで値にアクセス、検証してNGならraiseする。OKなら値をそのまま返す。

これだけ!w