我目前正在金字塔的一些项目中工作,对wtforms SelectField有问题。在
我有3个SelectField字段:
我可以在视图中加载汽车。我将通过AJAX/javascript在客户端加载其余SelectFields(car_model,car_version)的选项(选择car_make时,我可以选择car_model,依此类推)。在
问题是,当我提交表格时,汽车型号和汽车版本提出“无效选择”,因为(在选择field.pre_validation431号线)自我选择是空的。在
我怎样才能避开这个问题?在
您要做的是让WTForms处理“级联选择”(让一个选项的有效字段由另一个字段的值确定)。真的没有一个好的方法来使用内置字段。在
WTForms中的SelectField没有提供一个选项来表示“不要验证所提供的选项是否有效”。您必须提供选项,以便字段验证选择。在
作为shown in the docs,虽然通常可以用静态的选项列表填充选项字段。。。在
…但是,由于您是动态生成选项的,因此需要在实例化表单之后设置
^{2}$choices
属性。在在上面的示例中,“group_id”的选项是在金字塔视图中动态填充的。所以,这就是你需要做的:你需要在你的视图中填充选项。这就是您如何使用
car_make
来解决您的问题(尽管我认为您在您的问题中说过car_make
是可以的)。在但是,您遇到的问题是,}已经被解析和验证。WTForms并不能很好地处理这个问题(至少对于SelectFields),因为它假设所有字段都应该一次验证。换句话说,为了生成
car_model
的有效选择无法确定,因为它们依赖于{car_model
的有效选择列表,首先需要验证car_make
的值,鉴于SelectField的工作方式,这是不可能容易做到的。在我认为最好的方法是创建一个扩展SelectField类型的新字段类型,但删除验证:
此新类型重写pre_validate,后者通常执行检查以确定某个选项是否有效。在
如果您将此用于
car_model
,则不会再有该错误。但是,这意味着你的字段实际上没有被验证!要解决此问题,可以在表单上添加in-line validator。。。在你可能需要稍微调整一下,让它完全按照你想要的方式工作,我还没有实际测试过这个功能。在
相关问题 更多 >
编程相关推荐