Flask WTFormsSelectFieldフォームエラー有効な選択分析ではありません



Flask Wtforms Selectfield Form Error Not Vaild Choice Analysis



この問題については、ソースコードを見て発見しました。

class SelectField(SelectFieldBase): widget = widgets.Select() def __init__(self, label=None, validators=None, coerce=text_type, choices=None, **kwargs): super(SelectField, self).__init__(label, validators, **kwargs) self.coerce = coerce self.choices = copy(choices) def iter_choices(self): for value, label in self.choices: yield (value, label, self.coerce(value) == self.data) def process_data(self, value): try: self.data = self.coerce(value) except (ValueError, TypeError): self.data = None def process_formdata(self, valuelist): if valuelist: try: self.data = self.coerce(valuelist[0]) except ValueError: raise ValueError(self.gettext('Invalid Choice: could not coerce')) Def pre_validate(self, form): #pre-verification function for v, _ in self.choices: if self.data == v: break else: raise ValueError(self.gettext('Not a valid choice'))

pre_validate()クラスメソッドがあることがわかります。このpre_は、validate_と同様に、フロントボタンが送信された後にバックエンド応答(コードの下)が自動的にトリガーする形式である必要があります。

if form.validate_on_submit():

この事前検証関数を見て、内容が非常に単純であることを確認しましょう。つまり、フォームに割り当てた選択肢の値に現在の選択値が含まれているかどうかを確認します。あなたがそれを見つけることができないならば、あなたは無駄な選択を得るでしょう。

一般に、javaScriptを使用してオプションを書き直さず、このオプションの値が選択で報告されない場合。

したがって、この問題を解決する方法は、フォームの送信時に現在のオプションのオプションが選択肢に含まれているかどうかを確認することです。