Значение слишком длинное для типа character varying(x), хотя моя строка находится в пределах диапазона

Я использую поле phonenumber_field для хранения телефонных номеров.

phone_number = PhoneNumberField(blank=False, max_length=12)

Я также только что перешел с sqlite db на postgres и также запустил makemigrations и migrate. База данных sqlite работает, но я продолжаю получать ошибку "Значение слишком длинное для типа character varying(x)" для postgresql, даже если я сохраняю экземпляр со строкой, которая находится в пределах требования max_length.

Это мои настройки поля phonenumber_field

PHONENUMBER_DB_FORMAT = "NATIONAL"
PHONENUMBER_DEFAULT_REGION = "US"

Я создаю объект и сохраняю его в db

.
# string length is 10 but settings above add "+1" to front when value is saved 
obj = User(..., phone_number='xxxxxxxxxx')
obj.save()

Я понял это.

Если вы получаете эту ошибку, вам следует проверить локальные переменные по мере того, как вы отслеживаете ошибку. Для себя я обнаружил, что при сохранении номера телефона он сохраняется со скобками, поэтому он фактически превысил ограничение в 12 символов.

Я хотел сохранить: +13434344343, что составляет 12 символов

Но он был сохранен так: (343) 434-4343 is 14 chars long

Мне пришлось изменить файл Django settings.py

PHONENUMBER_DB_FORMAT = "E164"
PHONENUMBER_DEFAULT_REGION = "US"
Вернуться на верх