Memento memo.

Today I Learned.

WTFormsでPythonの予約語をFieldとして扱いたい場合の対処法

こういうことをしたかった。

class MyForm(FlaskForm):
    from = DateField(format='%Y%m%d')
    to = DateField(format='%Y%m%d')

が、これは syntax error になる。理由は fromPython予約語であるため。 from を辞書のkeyのstringとして扱えれば回避できるのでここは type を使ってclassをメタ的に生成する。

MyForm = type('MyForm', (FlaskForm,), {
    'from': DateField(format='%Y%m%d'),
    'to': DateField(format='%Y%m%d'),
})

値を取り出す際も dot アクセスするとsyntax errorになるので辞書として取得する。

f['from']

面倒なのでそもそもの form に予約語になりそうなフィールドを含めないようにしましょう。