Aslında uluslararası standart formatı içine görünebilir E. 164 , örneğin Twilio tarafından önerilen (bir hizmeti ve DİNLENME istekleri üzerinden SMS ya da telefon-çağrıları göndermek için bir API var).
Bu, özellikle birlikte çalıştığınız uluslararası numaralarınız varsa, telefon numaralarını saklamanın en evrensel yolu olabilir.
1. PhoneNumberField ile Telefon
phonenumber_field
Kitaplığı kullanabilirsiniz . Google'ın libphonenumber kitaplığının limanıdır ve Android'in telefon numarası işleme
https://github.com/stefanfoulis/django-phonenumber-field
Modelde:
from phonenumber_field.modelfields import PhoneNumberField
class Client(models.Model, Importable):
phone = PhoneNumberField(null=False, blank=False, unique=True)
Bilgi vermek:
from phonenumber_field.formfields import PhoneNumberField
class ClientForm(forms.Form):
phone = PhoneNumberField()
Telefonu nesne alanından dizge olarak alın:
client.phone.as_e164
Normolize telefon dizisi (testler ve diğer personel için):
from phonenumber_field.phonenumber import PhoneNumber
phone = PhoneNumber.from_string(phone_number=raw_phone, region='RU').as_e164
2. regexp ile telefon
Modeliniz için bir not: E.164 numaralarının maksimum karakter uzunluğu 15'tir.
Doğrulamak için, bazı biçimlendirme kombinasyonlarını kullanabilir ve ardından doğrulamak için hemen numarayla iletişime geçmeyi deneyebilirsiniz.
Django projemde aşağıdakine benzer bir şey kullandığıma inanıyorum:
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."))
DÜZENLE
Bu yazının bazı insanlar için faydalı olduğu anlaşılıyor ve aşağıdaki yorumu daha eksiksiz bir cevaba entegre etmeye değer görünüyor. Gereğince jpotter6 , siz de modellerde aşağıdaki gibi bir şey yapabilirsiniz:
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