Выберите поля с динамическими c значениями выбора в python весовых формах - PullRequest
0 голосов
/ 19 февраля 2020

Как создать поле выбора с динамическими c вариантами выбора в python масс-формах. Я прочитал почти все, что опубликовано. И я действительно понимаю это:

  1. не добавляйте варианты выбора в форме класса, потому что изучается только один раз и поставит вам проблемы при проверке следующим образом: category = SelectField('Category', coerce=int)
  2. coerce int, чтобы быть уверенным, что он будет правильно прочитан следующим образом: category = SelectField('Category', choices=[], coerce=int)
  3. добавить варианты выбора в конечную точку следующим образом: form.category.choices = categories

Теперь вот проблема:

  1. Если вы не добавляете варианты выбора = [], возникает ошибка NoneType
  2. Если вы добавляете варианты выбора, она не проверяется, поскольку "недействительно"

мой код:

author=SelectField('author', choices=[], default=1) 
Cursor.execute(source, 1)
choices_source=Cursor.fetchall()
    form.source.choices= [(c[0], c[1]) for c in choices_source]

Есть ли простой способ добиться этого?

1 Ответ

0 голосов
/ 08 мая 2020

Установка атрибута choices после создания экземпляра, похоже, работает:

import wtforms
from werkzeug.datastructures import MultiDict


class AuthorForm(wtforms.Form):

    author = wtforms.SelectField('author', coerce=int, default=1)


authors = [(1, 'Amy Tan'), (2, 'Michael Chabon')]
af = AuthorForm()
af.author.choices = authors
for field in af: 
    print(field)


af = AuthorForm(formdata=MultiDict([('author', '1')]))
af.author.choices = authors
if not af.validate():
    print(af.errors)
else:
    print(af.data)

Вывод:

<select id="author" name="author"><option selected value="1">Amy Tan</option><option value="2">Michael Chabon</option></select>
{'author': 1}

...