Je crée actuellement un champ de sélection dynamique à l'aide de WTFORMS, mais il ne soumet jamais et échoue la validation avec l'erreur suivante.
Not a valid choice
Mon champ est créé comme ceci:
area = SelectField()
et dans la vue, je saisis les options de la base de données comme suit:
form = MytestForm()
form.area.choices = [(a.id, a.name) for a in Area.objects.all()]
Cela fonctionne cependant si je crée des options statiques.
Je suppose que Area.id
est un int
- lorsque les données reviennent du client, elles sont traitées comme une chaîne par WTForms sauf si un appelable est passé à l'argument de mot clé coerce
du wtforms.fields.SelectField
constructeur:
area = SelectField(coerce=int)
Alternativement, si vous utilisez SQLAlchemy, vous pouvez utiliser wtforms.ext.sqlalchemy.fields.QuerySelectField
( wtforms_sqlalchemy
si vous utilisez WTForms 3+):
area = QuerySelectField(query_factory=Area.objects.all,
get_pk=lambda a: a.id,
get_label=lambda a: a.name)
Voici comment vous pouvez le résoudre sans QuerySelectField.
Voici comment j'ai fait:
years = [(str(y), y) for y in reversed(range(1950, 2013))]
years.insert(0, ('','year'))
year = wt.SelectField(choices=years)