私はmodel
このように電話番号を保存しています:
phone_number = models.CharField(max_length=12)
ユーザーは電話番号を入力し、私はその電話番号をSMS Authentication
使用します。このアプリケーションはグローバルに使用されます。したがって、国コードも必要になります。CharField
電話番号を保存する良い方法はありますか? また、電話番号を確認するにはどうすればよいですか?
私はmodel
このように電話番号を保存しています:
phone_number = models.CharField(max_length=12)
ユーザーは電話番号を入力し、私はその電話番号をSMS Authentication
使用します。このアプリケーションはグローバルに使用されます。したがって、国コードも必要になります。CharField
電話番号を保存する良い方法はありますか? また、電話番号を確認するにはどうすればよいですか?
たとえば、Twilio が推奨する国際的に標準化された形式E.164を実際に検討することもできます(REST 要求を介して SMS または電話を送信するためのサービスと API を持っています)。
これは、特に国際電話番号を使用している場合に、電話番号を保存する最も一般的な方法である可能性があります。
ライブラリを使用できますphonenumber_field
。これは、Android の電話番号処理を強化する Google の libphonenumber ライブラリのポートです
https://github.com/stefanfoulis/django-phonenumber-field
モデル内:
from phonenumber_field.modelfields import PhoneNumberField
class Client(models.Model, Importable):
phone = PhoneNumberField(null=False, blank=False, unique=True)
知らせる:
from phonenumber_field.formfields import PhoneNumberField
class ClientForm(forms.Form):
phone = PhoneNumberField()
オブジェクト フィールドから電話番号を文字列として取得します。
client.phone.as_e164
電話番号の文字列を正規化します (テストおよびその他のスタッフ用):
from phonenumber_field.phonenumber import PhoneNumber
phone = PhoneNumber.from_string(phone_number=raw_phone, region='RU').as_e164
モデルに関する 1 つの注意: E.164 番号の最大文字数は 15 です。
検証するには、いくつかの形式を組み合わせて使用し、すぐに番号に連絡して確認することができます。
私のdjangoプロジェクトで次のようなものを使用したと思います:
class ReceiverForm(forms.ModelForm):
phone_number = forms.RegexField(regex=r'^\+?1?\d{9,15}$',
error_message = ("Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed."))
編集
この投稿は一部の人々にとって役に立ったようであり、以下のコメントをより本格的な回答に統合する価値があるようです. jpotter6に従って、モデルで次のようなこともできます。
models.py:
from django.core.validators import RegexValidator
class PhoneModel(models.Model):
...
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
phone_number = models.CharField(validators=[phone_regex], max_length=17, blank=True) # validators should be a list
django-phonenumber-field を使用します: https://github.com/stefanfoulis/django-phonenumber-field
pip install django-phonenumber-field
CharField
モデルの電話フィールドとlocalflavor
フォーム検証用のアプリに使用します。
https://docs.djangoproject.com/en/1.7/topics/localflavor/
更新(29021-12-07)。LocalFlavor は Django の一部ではなくなったようです:
この解決策は私のために働いた:
最初にdjango-phone-fieldをインストールします
command: pip install django-phone-field
次にmodels.pyで
from phone_field import PhoneField
...
class Client(models.Model):
...
phone_number = PhoneField(blank=True, help_text='Contact phone number')
そしてsettings.pyで
INSTALLED_APPS = [...,
'phone_field'
]
最終的にはこんな感じ
それはすべて、電話番号として何を理解するかによって異なります。電話番号は国固有のものです。いくつかの国の localflavors パッケージには、独自の「電話番号フィールド」が含まれています。したがって、国固有でよければ、localflavor パッケージを確認する必要があります (class us.models.PhoneNumberField
米国の場合など)。
それ以外の場合は、localflavors を調べて、すべての国の最大の長さを取得できます。Localflavor には、電話番号を検証するために国コードと組み合わせて使用できるフォーム フィールドもあります。