1

フォーム.py

class UserCreateProfileForm(forms.ModelForm):
    fields = ['phone_daytime', 'phone_mobile']

    def clean(self):
        cd=self.cleaned_data
        validate_integer(cd.get('phone_daytime', None))
        validate_integer(cd.get('phone_mobile', None))
        return cd

     def validate_integer(phone_daytime,phone_mobile):
    try:
        int(phone_daytime,phone_mobile)
    except (ValueError, TypeError):
        raise ValidationError('Phone number must be number')

2 つの電話番号フィールドを含むフォームを検証したいと考えています。

上記のものは機能しておらず、エラーは発生していませんが機能していません。

このフィールドには、アルファベット、特殊文字、および空白も使用できません。この検証を行う方法。

ありがとう

4

2 に答える 2

0

編集:ええ、私は間違いなくこれを使用します。https://docs.djangoproject.com/en/1.5/ref/contrib/localflavor/電話フィールドは、多くの国ですでに実装されています。

インドの場合:

データが有効なインドの電話番号 (STD コードを含む) であることを検証します。0XXX-XXXXXXX または 0XXX XXXXXXX 形式に正規化されます。最初の文字列は STD コードで、「0」の後に 2 ~ 4 桁が続きます。2 番目の文字列は、STD コードが 3 桁の場合は 8 桁、STD コードが 4 桁の場合は 7 桁、STD コードが 5 桁の場合は 6 桁です。2 番目の文字列は 1 ~ 6 の数字で始まります。区切り文字はスペースまたはハイフンです。

import re

phone_digits_re = re.compile(r"""
(
(?P<std_code> # the std-code group
^0 # all std-codes start with 0
(
(?P<twodigit>\d{2}) | # either two, three or four digits
(?P<threedigit>\d{3}) | # following the 0
(?P<fourdigit>\d{4})
)
)
[-\s] # space or -
(?P<phone_no> # the phone number group
[1-6] # first digit of phone number
(
(?(twodigit)\d{7}) | # 7 more phone digits for 3 digit stdcode
(?(threedigit)\d{6}) | # 6 more phone digits for 4 digit stdcode
(?(fourdigit)\d{5}) # 5 more phone digits for 5 digit stdcode
)
)
)$""", re.VERBOSE)

ここから撮影。

あなたのモデルでは:

from django.core.validators import RegexValidator

class YourProfileModel(Model):
    phone_field = CharField(max_lenght=12, validators=[RegexValidator(regex=phone_digits_re)])
于 2013-05-14T14:36:46.483 に答える
0

電話番号の検証では、これが取るべきアプローチです。

class UserCreateProfileForm(forms.ModelForm):
    fields = ['phone_daytime', 'phone_mobile']

    def clean(self):
        cd = self.cleaned_data
        validate_phonenumber(cd.get('phone_daytime', None))
        validate_phonenumber(cd.get('phone_mobile', None))
        return cd

    def validate_phonenumber(phone_number):
        for char in phone_number:
            if not char.isdigit():
                raise ValidationError("Phone number must be number")

コードで発生したエラーは、実行しようとしたことですint(phone_daytime, phone_mobile)。これは正しくありません。これはTypeError(). 0また、あなたがしたことは、電話番号から先頭を削除します。とにかく解析された数値を使用しなかったので、それほど悪くはありませんでしたが、知っておくとよいでしょう。

于 2013-05-14T15:15:28.293 に答える