Sie aussehen könnten tatsächlich in das international genormte Format E.164 , von Twilio zum Beispiel empfohlen (die für das Senden von SMS oder Telefon-Anrufen über REST - Anfragen einen Service und eine API).
Dies ist wahrscheinlich die universellste Methode zum Speichern von Telefonnummern, insbesondere wenn Sie mit internationalen Nummern arbeiten.
1. Telefon von PhoneNumberField
Sie können die phonenumber_field
Bibliothek verwenden. Es ist der Port der libphonenumber-Bibliothek von Google, die die Handhabung der Telefonnummer von Android unter
https://github.com/stefanfoulis/django-phonenumber-field unterstützt
Im Modell:
from phonenumber_field.modelfields import PhoneNumberField
class Client(models.Model, Importable):
phone = PhoneNumberField(null=False, blank=False, unique=True)
Informieren:
from phonenumber_field.formfields import PhoneNumberField
class ClientForm(forms.Form):
phone = PhoneNumberField()
Holen Sie sich das Telefon als Zeichenfolge aus dem Objektfeld:
client.phone.as_e164
Telefonschnur normieren (für Tests und anderes Personal):
from phonenumber_field.phonenumber import PhoneNumber
phone = PhoneNumber.from_string(phone_number=raw_phone, region='RU').as_e164
2. Telefon per Regexp
Ein Hinweis für Ihr Modell: E.164-Zahlen haben eine maximale Zeichenlänge von 15.
Zur Validierung können Sie eine Kombination aus Formatierung und anschließendem Versuch verwenden, die Nummer sofort zu kontaktieren, um dies zu überprüfen.
Ich glaube, ich habe in meinem Django-Projekt Folgendes 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."))
BEARBEITEN
Es scheint, dass dieser Beitrag für einige Leute nützlich war, und es scheint sich zu lohnen, den folgenden Kommentar in eine umfassendere Antwort zu integrieren. Wie pro jpotter6 , können Sie so etwas wie die folgenden auf Ihre Modelle auch tun:
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