Возможно, вы действительно посмотрите на международно стандартизованный формат E.164, recommended by Twilio for example (у кого есть служба и API для отправки SMS или телефонных звонков через запросы REST).
Это, скорее всего, самый универсальный способ хранения телефонных номеров, в частности, если у вас есть международные номера.
Одно примечания для вашей модели: номера E.164 имеют максимальную длину символьного 15.
Для проверки, вы можете использовать некоторую комбинацию форматирования, а затем пытаетесь немедленно связаться номером для проверки.
Я считаю, что я что-то вроде следующего на моем Джанго проекте:
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
Похоже, что этот пост был полезным для некоторых людей, и это, кажется, стоит это интегрировать комментарий ниже в более полноценный ответ. В соответствии с jpotter6, вы можете сделать что-то вроде следующего на ваших моделях:
модели.ру:
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
Там в большое предложение здесь: http://stackoverflow.com/a/1245990/207791 –