Форматирование телефонных номеров для презентации и ввода в базу данных с использованием колбы - PullRequest
0 голосов
/ 08 июня 2018

Я пишу фляжное приложение с wtforms, поддерживаемым базой данных Postgres.

Я хочу, чтобы пользователь вводил номера телефонов практически в любом формате, NNN NNN NNNN, NNNNNNNNNN, NNN-NNN-NNNN и т. Д.

Я хочу хранить номера в базе данных без каких-либоразделители NNNNNNNNNN

Каков наилучший способ достичь этого?Я попытался поместить методы получения и установки в поле формы, но это нарушает функциональность, когда поле не связано.

class myform(FlaskForm):
    _phone=StringField('Phone #', validators=[Regexp("\d{3}[ ,-]?\d{3}[ ,-]?\d{4}"]

    @propery
    def phone(self)
        return '{}-{}-{}'.format(self._phone[0:3],self._phone[3:6],self._phone[6:10])

   @phone.setter
   def phone(self, value):
        value = value.replace(' ','')
        value = value.replace('-','')
        self._phone = value

1 Ответ

0 голосов
/ 08 июня 2018

Хотя это немного странно, вы можете редактировать данные формы в функциях, которые используются для проверки.

def reformat_phone(form, field):
    field.data = field.data.replace('-', '')
    return True

class PhoneForm(FlaskForm):
    phone = StringField('Phone #', validators=[reformat_phone])
    alright = SubmitField('submit')

Другие варианты включают в себя написание собственного класса поля телефона и переписывание там функции process_formdata.

РЕДАКТИРОВАТЬ:

вот вариант с созданием собственного поля:

class PhoneField(StringField):
    def process_formdata(self, valuelist):
        self.data = [v.replace('-', '') for v in valuelist]
        super().process_formdata(self.data)


class PhoneForm(FlaskForm):
    phone = PhoneField('Phone #')
    alright = SubmitField('submit')
...