在Python Flask WTForms中,如何创建对另一个字段的依赖关系

时间:2018-06-20 21:11:33

标签: python flask flask-wtforms wtforms

我有一个public_html字段:

source

然后是一个source = SelectField("Source", choices=[ ('option1', 'option1'), ('option2', 'option2'), ('option2', 'option2'), validators=[InputRequired()]) 字段,该字段根据上述情况需要不同的正则表达式:

uri

例如。如果选择了uri = StringField('URI', Regexp(regex=r'regex1')) ,则正则表达式将是option1,如果是regex1 option2,依此类推。

用WTForms实现它的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

此功能在WTForms中不存在。您必须自己使用此工具。这很快变得不平凡,这取决于您的特定应用程序逻辑/需求。

一种方法是让客户端JS向视图发送请求,该视图动态生成新表单,并根据输入添加表单的后续部分。例如,您的字段可以具有onChangeonBlur函数,该函数将输入发送到视图,该视图返回添加了下一组字段的新表单。

另一种解决方法是使用一些巧妙的表单呈现,CSS和JS。例如,将使用所有可能的字段呈现表单,但是将根据先前的选择(通过JS / CSS)有条件地隐藏和显示这些字段。这种方法的一个问题是验证变得复杂。

有一些writeups关于如何使用Django Forms(而不是WTForms)完成此操作。但是,相同的概念应该很容易应用于WTForms。

相关文档:dynamic form composition