[英]Flask + WTForms + SelectMultipleField and Dynamic Choices
[英]WTForms: How to select options in SelectMultipleField?
可以使用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
成員中),因此更改默認值之后將沒有任何效果,除非您在該字段上手動調用process()。 您可以設置data
成員,如下所示:
form.myfield.data = ['1', '3']
但我不確定他們中的任何一個是不是一個好習慣。
編輯:如果您想要實際設置數據而不是默認值,您應該使用表單來加載數據。
Form
對象將formdata
作為第一個參數,並使用它自動填充字段值。 (你應該使用帶有getlist -method的字典包裝器)
您還可以使用關鍵字參數在創建表單時設置數據,如下所示:
form = MyForm(myfield = ['1', '3'])
這對我在SelectField
上SelectField
:
form.myfield.default = '1'
form.process()
我猜你可以為一個SelectMultipleField
為form.myfield.default
分配一個列表。 但是,鍵分配給默認值后,似乎在調用表單上的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()
,它會丟失表單中其他字段的默認值。
干杯給你的幫助。 我嘗試了最后一個答案,它對我不起作用。 通過調用流程方法,它可以正常工作,只需使用它並將不想重置的數據傳遞給它的數據參數。 所以像這樣:
form.process(data={k: v for k, v in request.form.items() if
k=='your_form_item_name'})
這些答案都不適用於我(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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.