WTForms: Как выбрать параметры в SelectMultipleField? - PullRequest
15 голосов
/ 02 апреля 2011

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

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

Ответы [ 5 ]

21 голосов
/ 02 апреля 2011

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

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

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

Это пометит варианты 1 и 3 как выбранные.


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

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

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


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

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

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

form = MyForm(myfield = ['1', '3'])
18 голосов
/ 27 апреля 2012

Вот что у меня сработало на SelectField:

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

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

2 голосов
/ 04 сентября 2015

Вот что у меня сработало (с динамическим полем множественного выбора):

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(), он потеряет значения по умолчанию для других полей в моей форме.

0 голосов
/ 25 октября 2018

Ни один из этих ответов не работал для меня (WTForms 2.2);все они привели к одной и той же проблеме.Когда я отправляю данные с помощью запроса POST, значения, которые я устанавливаю как значения по умолчанию (будь то .default, .data, .process_data () или .process ()), возвращаются в мой контроллер независимо от изменений, которые я внес в значения вформа в браузере.

Чтобы решить эту проблему, я передал тип запроса обратно на контроллер и, если это был запрос POST, пропустил часть, в которой я установил значения по умолчанию.

form = controller.getForm(request= request.method)

и вконтроллер, где я обработал представление,

getForm(request="")
# ...
if request != "POST":
    # Set the default values for the form
else:
    # Go straight to validating the form data 
0 голосов
/ 18 июля 2017

Приветствую, ребята, за вашу помощь.Я попробовал последний ответ, и он не работал для меня.При вызове метода process он работает, и вы можете просто использовать его и передать в аргумент данных те данные, которые вы не хотите сбрасывать.Вот как то так:

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