Значение слишком длинное для типа 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"