web-dev-qa-db-fra.com

Pas un choix valide pour le champ de sélection dynamique WTFORMS

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.

35
ismail

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)
81
Sean Vieira

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)
4
Rickard Zachrisson