Flask の wtform は入力値の自動チェックを行うので便利なんですが、自動チェックさせるとときどき引っかかるので面倒です。
SelectField を使うなら値はしっかり設定しておかねば入力値はすべてはじいてくれます。選択肢をデータベースからひいてきて自動設定している場合なぞ要注意です。
SelectField を設定する関数を書けば便利です。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def prepare_verseform(form): | |
try: | |
with engine.connect(): | |
form.lang.choices = [(0, "-")] | |
form.genre.choices.append((0, '-')) | |
langlist = db.session.query(Lang).all() | |
for item in langlist: | |
form.lang.choices.append((item.id, item.lang)) | |
genrelist = db.session.query(Genre).all() | |
for item in genrelist: | |
form.genre.choices.append((item.id, item.genre)) | |
return form | |
except Exception as e: | |
return None |
Form をインスタンス化しただけで form.validate() をついかけてしまうような間違いを防ぐことができます。