Выбор может быть установлен с помощью form.myfield.choices=[("1","Choice1"), ("2","Choice2")]
Каков способ установки выбранной опции?
Выбор может быть установлен с помощью form.myfield.choices=[("1","Choice1"), ("2","Choice2")]
Каков способ установки выбранной опции?
При создании поля вы можете использовать аргументы ключевого слова 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'])
Это то, что сработало для меня на SelectField
:
form.myfield.default = '1'
form.process()
Я предполагаю, что вы можете просто назначить список form.myfield.default
для SelectMultipleField
. Однако ключ, по-видимому, вызывает метод process
в форме после назначения по умолчанию.
Это то, что сработало для меня (с динамическим полем с несколькими полями):
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()
, он теряет значения по умолчанию для других полей в моей форме.
Приветствуем ребята за вашу помощь. Я попробовал последний ответ, и это не сработало для меня. При вызове метода процесса он работает, и вы можете просто использовать его и передать его аргументу данных данные, которые вы не хотите быть reset. Так что-то вроде этого:
form.process(data={k: v for k, v in request.form.items() if
k=='your_form_item_name'})