在 Python Flask WTForms 中,如何创建对另一个字段的依赖
In Python Flask WTForms, how to create a dependency over another field
我有一个 source
字段:
source = SelectField("Source", choices=[
('option1', 'option1'),
('option2', 'option2'),
('option3', 'option3'),
validators=[InputRequired()])
然后是一个 uri
字段,它需要基于上述内容的不同正则表达式:
uri = StringField('URI', Regexp(regex=r'regex1'))
例如。如果选择 option1
,则正则表达式将为 regex1
,如果选择 option2
,则为 regex2
,依此类推。
用 WTForms 实现它的正确方法是什么?
WTForms 中不存在此功能。您必须自己使用工具。这很快就会变得很重要,具体取决于您的具体应用 logic/needs。
一种方法是让客户端 JS 向动态生成新表单的视图发送请求,并根据输入添加表单的后续部分。例如,您的字段可以有一个 onChange
或 onBlur
函数,该函数将输入发送到一个视图,该视图 returns 添加了下一组字段的新表单。
解决此问题的另一种方法是使用一些巧妙的表单呈现,CSS 和 JS。例如,表单将呈现所有可能的字段,但这些字段将根据之前通过 JS/CSS 所做的选择有条件地隐藏和显示。这种方法的一个问题是验证变得复杂。
关于如何使用 Django Forms 而不是 WTForms,有一些 writeups。不过,相同的概念应该很容易适用于 WTForms。
相关文档:dynamic form composition.
我有一个 source
字段:
source = SelectField("Source", choices=[
('option1', 'option1'),
('option2', 'option2'),
('option3', 'option3'),
validators=[InputRequired()])
然后是一个 uri
字段,它需要基于上述内容的不同正则表达式:
uri = StringField('URI', Regexp(regex=r'regex1'))
例如。如果选择 option1
,则正则表达式将为 regex1
,如果选择 option2
,则为 regex2
,依此类推。
用 WTForms 实现它的正确方法是什么?
WTForms 中不存在此功能。您必须自己使用工具。这很快就会变得很重要,具体取决于您的具体应用 logic/needs。
一种方法是让客户端 JS 向动态生成新表单的视图发送请求,并根据输入添加表单的后续部分。例如,您的字段可以有一个 onChange
或 onBlur
函数,该函数将输入发送到一个视图,该视图 returns 添加了下一组字段的新表单。
解决此问题的另一种方法是使用一些巧妙的表单呈现,CSS 和 JS。例如,表单将呈现所有可能的字段,但这些字段将根据之前通过 JS/CSS 所做的选择有条件地隐藏和显示。这种方法的一个问题是验证变得复杂。
关于如何使用 Django Forms 而不是 WTForms,有一些 writeups。不过,相同的概念应该很容易适用于 WTForms。
相关文档:dynamic form composition.