WTForms: Как выбрать опции в SelectMultipleField?

Выбор может быть установлен с помощью form.myfield.choices=[("1","Choice1"), ("2","Choice2")]

Каков способ установки выбранной опции?

Ответы

Ответ 1

При создании поля вы можете использовать аргументы ключевого слова choices и default, например:

my_choices = [('1', 'Choice1'), ('2', 'Choice2'), ('3', 'Choice3')]

SelectMultipleField(choices = my_choices, default = ['1', '3'])

Это будет отмечать выбранные варианты 1 и 3.


Изменить: Значения по умолчанию, по-видимому, обрабатываются (копируются в член data), когда форма активируется, поэтому изменение значения по умолчанию не будет иметь никакого эффекта, если вы не вызовете вручную процесс ( ) на поле. Вы можете установить data -member, например:

form.myfield.data = ['1', '3']

Но я не уверен, что любая из них - хорошая практика.


Изменить: Если вы хотите фактически установить данные, а не по умолчанию, вероятно, вы должны использовать форму для загрузки данных.

Form объекты принимают formdata в качестве первого аргумента и используют это для автоматического заполнения значений полей. (Предполагается, что для этого используется оболочка словаря с методом getlist)

Вы также можете использовать аргументы ключевых слов для установки данных при создании формы, например:

form = MyForm(myfield = ['1', '3'])

Ответ 2

Это то, что сработало для меня на SelectField:

form.myfield.default = '1'
form.process()

Я предполагаю, что вы можете просто назначить список form.myfield.default для SelectMultipleField. Однако ключ, по-видимому, вызывает метод process в форме после назначения по умолчанию.

Ответ 3

Это то, что сработало для меня (с динамическим полем с несколькими полями):

form  = MyForm(request.form, obj=my_obj)
form.tags.choices = [('1', 'abc'), ('2', 'def')]
form.tags.default = ['1', '2']
form.tags.process(request.form)

Если я просто вызываю form.process(), он теряет значения по умолчанию для других полей в моей форме.

Ответ 4

Приветствуем ребята за вашу помощь. Я попробовал последний ответ, и это не сработало для меня. При вызове метода процесса он работает, и вы можете просто использовать его и передать его аргументу данных данные, которые вы не хотите быть reset. Так что-то вроде этого:

    form.process(data={k: v for k, v in request.form.items() if 
    k=='your_form_item_name'})