簡體   English   中英

WTForms:如何在SelectMultipleField中選擇選項?

[英]WTForms: How to select options in SelectMultipleField?

可以使用form.myfield.choices=[("1","Choice1"), ("2","Choice2")]

設置所選選項的方法是什么?

您可以在創建字段時使用choicesdefault關鍵字參數,如下所示:

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'])

這對我在SelectFieldSelectField

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

我猜你可以為一個SelectMultipleFieldform.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM