如何在WTForms的RadioField中动态设置默认值?

15
我正在使用Python Flask框架构建一个网站,其中我使用WTForms。在一个表单中,我定义了一个RadioField,如下所示:
display = RadioField('display', default='ONE')

这里没有定义任何选项,因为我稍后会进行操作(这个过程非常完美),请看下面的代码:
myForm = MyForm()
myForm.display.choices = [('ONE', 'one'), ('TWO', 'two')]  # This works fine

我现在想在设置选项后为RadioField设置默认值。所以我尝试从定义中删除默认值(我不确定'ONE'是否总是可用的选择),并在创建选项后创建默认值,就像上面所做的那样:

myForm.display.default = 'ONE'

很遗憾,这没有任何效果。如果我像以前一样在字段定义中手动设置它,它可以正常工作,但是如果我在创建选项后动态设置它,则无法正常工作。

有人知道如何在WTForms中动态设置RadioField的默认值吗?欢迎提供所有提示!


你可以在表单构造函数中传递默认值,这样你就可以首先获取选项,然后将默认选项传递给MyForm构造函数:MyForm(display='ONE')。 - Bartosz Grzybowski
2个回答

26

在添加选项并设置 default 属性后,您需要运行 myForm.process()

myForm = MyForm()
myForm.display.choices = [('ONE', 'one'), ('TWO', 'two')]
myForm.display.default = 'ONE'
myForm.process() # process choices & default

这是因为 defaultprocess 方法中被传递到字段值(对于 RadioField,还包括 checked 属性),并且该方法在构造函数中被调用。


0
根据Bartosz Grzybowski的评论,你可以在构造函数中传递默认值。
class MyForm(Form):
    display = RadioField('display', default='ONE')

# Overwrite the default given in the field definition
myForm = MyForm(display='TWO')

这是因为WTForms使用kwargs来提供字段数据

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接