Solución:
En realidad, podría buscar el formato E.164 estandarizado internacionalmente, recomendado por Twilio, por ejemplo (que tiene un servicio y una API para enviar SMS o llamadas telefónicas a través de solicitudes REST).
Es probable que esta sea la forma más universal de almacenar números de teléfono, en particular si tiene números internacionales con los que trabaja.
1. Llame por PhoneNumberField
Puedes usar phonenumber_field
Biblioteca. Es el puerto de la biblioteca libphonenumber de Google, que impulsa el manejo de números de teléfono de Android https://github.com/stefanfoulis/django-phonenumber-field
En modelo:
from phonenumber_field.modelfields import PhoneNumberField
class Client(models.Model, Importable):
phone = PhoneNumberField(null=False, blank=False, unique=True)
En forma:
from phonenumber_field.formfields import PhoneNumberField
class ClientForm(forms.Form):
phone = PhoneNumberField()
Obtenga el teléfono como una cadena del campo del objeto:
client.phone.as_e164
Cadena de teléfono Normolize (para pruebas y otro personal):
from phonenumber_field.phonenumber import PhoneNumber
phone = PhoneNumber.from_string(phone_number=raw_phone, region='RU').as_e164
2. Llamar por regexp
Una nota para su modelo: los números E.164 tienen una longitud máxima de caracteres de 15.
Para validar, puede emplear alguna combinación de formato y luego intentar comunicarse con el número inmediatamente para verificar.
Creo que usé algo como lo siguiente en mi proyecto 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."))
EDITAR
Parece que esta publicación ha sido útil para algunas personas, y parece que vale la pena integrar el comentario a continuación en una respuesta más completa. Según jpotter6, también puede hacer algo como lo siguiente en sus modelos:
modelos.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
Utilice django-phonenumber-field: https://github.com/stefanfoulis/django-phonenumber-field
pip install django-phonenumber-field
Usar CharField
para el campo de teléfono en el modelo y el localflavor
aplicación para la validación de formularios:
https://docs.djangoproject.com/en/1.7/topics/localflavor/