2013年1月10日木曜日

Djangoで、フォームのカスタムバリデーション

Django(1.4.2)で、フォームのカスタムバリデーションです。既存のモデルに追加して、条件を加えたいたい時などにcleanメソッドを使うと、細かくデータの入力チェックが行えます。複数をまとめてチェックする場合は、メソッド名を「clean」に、個別に行う場合は、「clean_(変数名)」とすれば良いようです。

views.py
import re

class RegistrationForm(ModelForm):
    class Meta:
        model = Member
        fields = ('nickname','gender','age','zip','address','tel',)

    # ニックネーム
    def clean_nickname(self):
        nickname = self.cleaned_data['nickname']
        if len(nickname) < 3:
            raise forms.ValidationError(u'ニックネームを3文字以上で')
        return nickname

    # 郵便番号
    def clean_zip(self):
        zip = self.cleaned_data['zip']
        if zip:
            if not re.match(r'^\d{3}-\d{4}$', zip):
                raise forms.ValidationError(u'郵便番号はXXX-XXXXの形式で')
        return zip

    # 電話番号
    def clean_tel(self):
        tel = self.cleaned_data['tel']
        if tel:
            if not re.match(r'^\d{2,4}-\d{2,4}-\d{4}$', tel):
                raise forms.ValidationError(u'電話番号はXXXX-XXXX-XXXXの形式で')
        return tel


参考サイト
フォームやフィールドのバリデーション(Django documentation)
forms.pyでバリデーションするときにハマった(AtAsAtAmAtArAさん)

0 件のコメント:

コメントを投稿