Подтвердить что ты не робот

Недействительный выбор для динамического поля выбора 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()]

Он работает, однако, если я создаю статические параметры.

4b9b3361

Ответ 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)