Django Phonenumber Field

django-phonenumber-field предоставляет поле для работы с международными номерами телефонов.

Установка

1# Установка пакета
2pip install django-phonenumber-field phonenumbers
1# Или через Poetry
2poetry add django-phonenumber-field phonenumbers

Использование в моделях

1from phonenumber_field.modelfields import PhoneNumberField
2
3class Contact(models.Model):
4    name = models.CharField(max_length=100)
5    phone = PhoneNumberField(region='RU')  # По умолчанию для России
6
7    def __str__(self):
8        return f"{self.name}: {self.phone}"

В формах

1from phonenumber_field.formfields import PhoneNumberField as FormPhoneNumberField
2
3class ContactForm(forms.Form):
4    phone = FormPhoneNumberField(region='RU')

Работа с номерами

 1# Создание
 2contact = Contact.objects.create(
 3    name="John",
 4    phone="+79161234567"
 5)
 6
 7# Форматирование
 8str(contact.phone)  # '+7 916 123-45-67'
 9contact.phone.as_national  # '8 (916) 123-45-67'
10contact.phone.as_international  # '+7 916 123-45-67'
11
12# Проверка валидности
13contact.phone.is_valid()  # True
14
15# Получение информации о номере
16contact.phone.country_code  # 7
17contact.phone.national_number  # 9161234567

Валидация в админке

1from django.contrib import admin
2from phonenumber_field.widgets import PhoneNumberPrefixWidget
3
4@admin.register(Contact)
5class ContactAdmin(admin.ModelAdmin):
6    formfield_overrides = {
7        PhoneNumberField: {'widget': PhoneNumberPrefixWidget},
8    }

FAQ

Q: Как валидировать номера?
A: Поле автоматически валидирует номера по международным стандартам.

Q: Можно ли изменить регион по умолчанию?
A: Да, используй параметр region в PhoneNumberField.