在调用DateField的验证器之前如何修改field.data?
我的问题很简单,这里有一个基本的例子:
class F(Form):
date_test = DateField('Test', validators=[Required()], format='%d/%m/%Y')
我需要在验证器被调用之前,修改用户发送的值。有什么简单的方法可以做到这一点,同时又不失去使用WTForms的好处呢?
2 个回答
2
所有的WTForm字段都应该支持一个叫做 filters
的参数,这个参数是一个可调用对象的列表,会对输入的数据进行处理:
def transform_data(data):
# do something with data here
return data
class F(Form):
date_test = DateField('Test', validators=[Required()], format='%d/%m/%Y',
filters=[transform_data])
2
其实“过滤器”挺不错的,但并不是我想要的效果。于是我创建了一个自定义字段,现在它可以正常工作了。
class MyDateField(DateField):
def __init__(self, label='', validators=None, transform_data=False, **kwargs):
super(MyDateField, self).__init__(label, validators, **kwargs)
self.transform_data = transform_data
def process_formdata(self, valuelist):
if self.transform_data:
data = str(valuelist[0])
# transform your data here. (for example: data = data.replace('-', '.'))
super(MyDateField, self).process_formdata([data])
class F(Form):
date_test = MyDateField('Test', validators=[Required()], format='%d/%m/%Y', transform_data=True])
如果你想直接修改用户字段里的值,你需要重写 _value() 这个方法。