我正在写一个带有由Postgres db支持的wtforms的烧瓶应用程序。
我希望用户输入几乎任何格式的电话号码,NNN NNN NNNN
,NNNNNNNNNN
,NNN-NNN-NNNN
等。
我想将数字存储在数据库中,没有任何分隔符NNNNNNNNNN
实现这一目标的最佳方法是什么?我尝试在表单字段中放置getter和setter,但是当字段未绑定时,这会破坏功能。
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
虽然有点hacky,但您可以编辑用于验证的函数中的表单数据。
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')