現在、WTFORMSを使用して動的選択フィールドを作成していますが、送信せず、次のエラーで検証に失敗します。
Not a valid choice
私のフィールドは次のように作成されます。
area = SelectField()
ビューでは、次のようにデータベースからオプションを取得しています:
form = MytestForm()
form.area.choices = [(a.id, a.name) for a in Area.objects.all()]
ただし、静的オプションを作成すると機能します。
私の推測では、Area.id
はint
である-クライアントからデータが返されると、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)
QuerySelectFieldを使用せずに解決する方法を次に示します。
ここに私がやった方法があります:
years = [(str(y), y) for y in reversed(range(1950, 2013))]
years.insert(0, ('','year'))
year = wt.SelectField(choices=years)