我有一个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实现它的正确方法是什么?
答案 0 :(得分:1)
此功能在WTForms中不存在。您必须自己使用此工具。这很快变得不平凡,这取决于您的特定应用程序逻辑/需求。
一种方法是让客户端JS向视图发送请求,该视图动态生成新表单,并根据输入添加表单的后续部分。例如,您的字段可以具有onChange
或onBlur
函数,该函数将输入发送到视图,该视图返回添加了下一组字段的新表单。
另一种解决方法是使用一些巧妙的表单呈现,CSS和JS。例如,将使用所有可能的字段呈现表单,但是将根据先前的选择(通过JS / CSS)有条件地隐藏和显示这些字段。这种方法的一个问题是验证变得复杂。
有一些writeups关于如何使用Django Forms(而不是WTForms)完成此操作。但是,相同的概念应该很容易应用于WTForms。
相关文档:dynamic form composition。