Sie könnten tatsächlich in das international standardisierte Format E.164, recommended by Twilio for example (die einen Dienst und eine API zum Senden von SMS oder Telefonanrufe über REST-Anforderungen haben) suchen.
Dies ist wahrscheinlich die allgemeinste Art, Telefonnummern zu speichern, insbesondere wenn Sie mit internationalen Nummern arbeiten.
Ein Hinweis für Ihr Modell: E.164-Nummern haben eine maximale Zeichenlänge von 15
Zur Validierung, können Sie eine Kombination von Formatierung verwenden und dann sofort die Nummer versucht zu kontaktieren, um zu überprüfen.
Ich glaube, ich so etwas wie die folgenden auf meinem django Projekt verwendet:
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."))
EDIT
Es scheint, dass dieser Beitrag auf einige Leute nützlich gewesen ist, und es scheint wert Es um den Kommentar unten in eine umfassendere Antwort zu integrieren. Nach jpotter6 können Sie auch so etwas wie die folgenden auf Ihren Modellen tun:
Modelle.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
Es gibt ein toller Vorschlag hier: http://stackoverflow.com/a/1245990/207791 –