3

私の問題は非常に単純です。これが基本的な例です。

class F(Form):
  date_test = DateField('Test', validators=[Required()], format='%d/%m/%Y')

バリデーターが呼び出される前に、ユーザーから送信された値を変更する必要があります。WTFormsを使用する利点を失うことなくこれを行う最も簡単な方法は何ですか?

4

2 に答える 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])
于 2013-01-26T18:19:54.310 に答える
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()をオーバーライドする必要があります。

于 2013-01-27T01:11:08.803 に答える