Bạn thực sự có thể xem xét định dạng chuẩn quốc tế E.164 , được đề xuất bởi Twilio chẳng hạn (người có dịch vụ và API để gửi SMS hoặc cuộc gọi điện thoại qua yêu cầu REST).
Đây có thể là cách phổ biến nhất để lưu trữ số điện thoại, đặc biệt nếu bạn có số quốc tế làm việc cùng.
1. Điện thoại của PhoneNumberField
Bạn có thể sử dụng phonenumber_field
thư viện. Đây là cổng của thư viện libphonenumber của Google, hỗ trợ xử lý số điện thoại của Android
https://github.com/stefanfoulis/django-phonenumber-field
Trong mô hình:
from phonenumber_field.modelfields import PhoneNumberField
class Client(models.Model, Importable):
phone = PhoneNumberField(null=False, blank=False, unique=True)
Thông báo:
from phonenumber_field.formfields import PhoneNumberField
class ClientForm(forms.Form):
phone = PhoneNumberField()
Lấy điện thoại dưới dạng chuỗi từ trường đối tượng:
client.phone.as_e164
Định mức chuỗi điện thoại (để kiểm tra và nhân viên khác):
from phonenumber_field.phonenumber import PhoneNumber
phone = PhoneNumber.from_string(phone_number=raw_phone, region='RU').as_e164
2. Điện thoại bằng regrec
Một lưu ý cho mô hình của bạn: Số E.164 có độ dài ký tự tối đa là 15.
Để xác thực, bạn có thể sử dụng một số kết hợp định dạng và sau đó cố gắng liên hệ với số ngay lập tức để xác minh.
Tôi tin rằng tôi đã sử dụng một cái gì đó như sau trong dự án django của tôi:
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."))
BIÊN TẬP
Có vẻ như bài đăng này đã hữu ích với một số người, và có vẻ đáng để tích hợp bình luận bên dưới vào một câu trả lời đầy đủ hơn. Theo jpotter6 , bạn cũng có thể làm một số thứ như sau trên các mô hình của mình:
mô hình:
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