Vous pouvez en fait regarder dans le format normalisé internationalement E.164 , recommandé par Twilio par exemple (qui ont un service et une API pour envoyer des SMS ou des appels téléphoniques via des requêtes REST).
C'est probablement le moyen le plus universel de stocker des numéros de téléphone, en particulier si vous travaillez avec des numéros internationaux.
1. Téléphone par PhoneNumberField
Vous pouvez utiliser la phonenumber_field
bibliothèque. C'est le port de la bibliothèque libphonenumber de Google, qui alimente la gestion des numéros de téléphone d'Android
https://github.com/stefanfoulis/django-phonenumber-field
Dans le modèle:
from phonenumber_field.modelfields import PhoneNumberField
class Client(models.Model, Importable):
phone = PhoneNumberField(null=False, blank=False, unique=True)
Informer:
from phonenumber_field.formfields import PhoneNumberField
class ClientForm(forms.Form):
phone = PhoneNumberField()
Obtenez le téléphone sous forme de chaîne à partir du champ objet:
client.phone.as_e164
Normoliser la chaîne téléphonique (pour les tests et autres membres du personnel):
from phonenumber_field.phonenumber import PhoneNumber
phone = PhoneNumber.from_string(phone_number=raw_phone, region='RU').as_e164
2. Téléphone par regexp
Une note pour votre modèle: les nombres E.164 ont une longueur maximale de 15 caractères.
Pour valider, vous pouvez utiliser une combinaison de formatage, puis tenter de contacter immédiatement le numéro pour vérifier.
Je crois que j'ai utilisé quelque chose comme ce qui suit sur mon projet 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."))
ÉDITER
Il semble que cet article ait été utile à certaines personnes, et il semble intéressant d'intégrer le commentaire ci-dessous dans une réponse plus complète. Selon jpotter6 , vous pouvez également faire quelque chose comme ce qui suit sur vos modèles:
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