W rzeczywistości możesz zajrzeć do znormalizowanego na całym świecie formatu E.164 , zalecanego na przykład przez Twilio (którzy mają usługę i interfejs API do wysyłania wiadomości SMS lub połączeń telefonicznych za pośrednictwem żądań REST).
Jest to prawdopodobnie najbardziej uniwersalny sposób przechowywania numerów telefonów, zwłaszcza jeśli masz numery międzynarodowe.
1. Telefon przez PhoneNumberField
Możesz skorzystać z phonenumber_field
biblioteki. Jest to port biblioteki Google libphonenumber, która obsługuje obsługę numerów telefonów Androida
https://github.com/stefanfoulis/django-phonenumber-field
W modelu:
from phonenumber_field.modelfields import PhoneNumberField
class Client(models.Model, Importable):
phone = PhoneNumberField(null=False, blank=False, unique=True)
Formalnie:
from phonenumber_field.formfields import PhoneNumberField
class ClientForm(forms.Form):
phone = PhoneNumberField()
Pobierz telefon jako ciąg z pola obiektu:
client.phone.as_e164
Normolize string phone (do testów i innych pracowników):
from phonenumber_field.phonenumber import PhoneNumber
phone = PhoneNumber.from_string(phone_number=raw_phone, region='RU').as_e164
2. Telefon przez regexp
Jedna uwaga dotycząca twojego modelu: numery E.164 mają maksymalną długość 15 znaków.
Aby to sprawdzić, możesz zastosować kombinację formatowania, a następnie spróbować natychmiast skontaktować się z numerem w celu weryfikacji.
Wydaje mi się, że w moim projekcie django użyłem czegoś takiego:
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."))
EDYTOWAĆ
Wygląda na to, że ten post był przydatny dla niektórych osób i wydaje się, że warto włączyć poniższy komentarz do pełniejszej odpowiedzi. Zgodnie z jpotter6 , możesz również wykonać na swoich modelach coś takiego:
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