web-dev-qa-db-ja.com

動的選択フィールドWTFORMSの有効な選択肢ではありません

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

Not a valid choice

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

area = SelectField()

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

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

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

35
ismail

私の推測では、Area.idintである-クライアントからデータが返されると、stringとして扱われます wtforms.fields.SelectField コンストラクターのcoerceキーワード引数に呼び出し可能オブジェクトが渡されない限り、WTForms:

area = SelectField(coerce=int)

あるいは、SQLAlchemyを使用している場合、 wtforms.ext.sqlalchemy.fields.QuerySelectField (WTForms 3+を使用している場合、 wtforms_sqlalchemy を使用できます。

area = QuerySelectField(query_factory=Area.objects.all,
                            get_pk=lambda a: a.id,
                            get_label=lambda a: a.name)
81
Sean Vieira

QuerySelectFieldを使用せずに解決する方法を次に示します。

ここに私がやった方法があります:

years = [(str(y), y) for y in reversed(range(1950, 2013))]
years.insert(0, ('','year'))
year = wt.SelectField(choices=years)
4