52

現在、WTFORMS を使用して動的選択フィールドを作成していますが、送信されず、次のエラーで検証に失敗します。

Not a valid choice

私のフィールドは次のように作成されます。

area = SelectField()

ビューでは、次のようにデータベースからオプションを取得しています。

form = MytestForm()
form.area.choices = [(a.id, a.name) for a in Area.objects.all()]

ただし、静的オプションを作成すると機能します。

4

3 に答える 3

114

私の推測ではArea.id、データがクライアントから戻ってくると、コンストラクターのキーワード引数にcallable が渡されない限り、WTForms によって文字列intとして扱われます。coercewtforms.fields.SelectField

area = SelectField(coerce=int)

別の方法として、SQLAlchemy を使用している場合は、以下を使用できますwtforms.ext.sqlalchemy.fields.QuerySelectField( wtforms_sqlalchemyWTForms 3+ を使用している場合):

area = QuerySelectField(query_factory=Area.objects.all,
                            get_pk=lambda a: a.id,
                            get_label=lambda a: a.name)
于 2012-12-20T03:37:19.567 に答える
0

Form クラスをセットアップするときは、利用可能な選択肢も忘れずに入力してください。

class MyForm(FlaskForm):
    sel = SelectField(coerce=int, label="MyLabel", choices=my_choices)
    ....

選択肢は次のようになります。

my_choices = [x.id for x in get_products()]

関数が呼び出されると、pre_validateスクリプト内の関数で例外が発生します/wtforms/fields/core.pyvalidate_on_submit()

于 2021-06-16T09:19:10.807 に答える