私の問題は非常に単純です。これが基本的な例です。
class F(Form):
date_test = DateField('Test', validators=[Required()], format='%d/%m/%Y')
バリデーターが呼び出される前に、ユーザーから送信された値を変更する必要があります。WTFormsを使用する利点を失うことなくこれを行う最も簡単な方法は何ですか?
私の問題は非常に単純です。これが基本的な例です。
class F(Form):
date_test = DateField('Test', validators=[Required()], format='%d/%m/%Y')
バリデーターが呼び出される前に、ユーザーから送信された値を変更する必要があります。WTFormsを使用する利点を失うことなくこれを行う最も簡単な方法は何ですか?
すべての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])
実際には「フィルター」は素晴らしかったですが、それは私がやろうとしていたこととはまったく異なりました。カスタムフィールドを作成しましたが、機能しています。
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()をオーバーライドする必要があります。