Anda mungkin benar-benar melihat ke dalam format standar internasional E.164 , direkomendasikan oleh Twilio misalnya (yang memiliki layanan dan API untuk mengirim SMS atau panggilan telepon melalui permintaan REST).
Ini kemungkinan merupakan cara paling universal untuk menyimpan nomor telepon, khususnya jika Anda memiliki nomor internasional.
1. Telepon dengan PhoneNumberField
Anda bisa menggunakan phonenumber_field
perpustakaan. Ini adalah port dari perpustakaan libphonenumber Google, yang mendukung penanganan nomor telepon Android
https://github.com/stefanfoulis/django-phonenumber-field
Dalam model:
from phonenumber_field.modelfields import PhoneNumberField
class Client(models.Model, Importable):
phone = PhoneNumberField(null=False, blank=False, unique=True)
Dalam bentuk:
from phonenumber_field.formfields import PhoneNumberField
class ClientForm(forms.Form):
phone = PhoneNumberField()
Dapatkan ponsel sebagai string dari bidang objek:
client.phone.as_e164
Normolisasi string telepon (untuk tes dan staf lain):
from phonenumber_field.phonenumber import PhoneNumber
phone = PhoneNumber.from_string(phone_number=raw_phone, region='RU').as_e164
2. Telepon dengan regexp
Satu catatan untuk model Anda: angka E.164 memiliki panjang karakter maks 15.
Untuk memvalidasi, Anda dapat menggunakan beberapa kombinasi pemformatan dan kemudian mencoba menghubungi nomor tersebut segera untuk memverifikasi.
Saya percaya saya menggunakan sesuatu seperti berikut pada proyek Django saya:
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
Tampaknya pos ini bermanfaat bagi sebagian orang, dan tampaknya layak untuk mengintegrasikan komentar di bawah ini ke dalam jawaban yang lebih lengkap. Sesuai jpotter6 , Anda dapat melakukan sesuatu seperti yang berikut pada model Anda juga:
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