Недействительный выбор для динамического поля выбора WTFORMS
В настоящее время я создаю поле динамического выбора с использованием WTFORMS, однако он никогда не отправляет и не выполняет проверку со следующей ошибкой.
Not a valid choice
My Field создается следующим образом:
area = SelectField()
и в представлении я хватаю опции из db следующим образом:
form = MytestForm()
form.area.choices = [(a.id, a.name) for a in Area.objects.all()]
Он работает, однако, если я создаю статические параметры.
Ответы
Ответ 1
Я предполагаю, что Area.id
является int
- когда данные возвращаются с клиента, он обрабатывается WTForms как строка, если вызываемый не передается аргументу coerce
ключевого слова wtforms.fields.SelectField
конструктор:
area = SelectField(coerce=int)
В качестве альтернативы, если вы используете SQLAlchemy, вы можете использовать wtforms.ext.sqlalchemy.fields.QuerySelectField
(wtforms_sqlalchemy
, если вы используют WTForms 3 +):
area = QuerySelectField(query_factory=Area.objects.all,
get_pk=lambda a: a.id,
get_label=lambda a: a.name)
Ответ 2
Вот как вы можете решить это без QuerySelectField.
Вот как я это сделал:
years = [(str(y), y) for y in reversed(range(1950, 2013))]
years.insert(0, ('','year'))
year = wt.SelectField(choices=years)