如何使用自定义验证器动态地向表单添加输入字段?

时间:2018-01-20 20:03:54

标签: python validation flask wtforms flask-wtforms

我有一个在视图中动态添加了几个整数字段的表单,这些字段供用户从1-N排名。我无法弄清楚如何编写一个可以确保到达field.data的验证器具有唯一值,从1到N.

我已经找到了如何根据wtforms' docs向表单动态添加字段,但我想像this question那样相互验证它们,我还没想出如何正确引用被覆盖的validate函数中的动态字段。

如何在验证器中引用表单实例中的动态字段?在上面链接的问题中,他们在行中执行:

for field in [self.select1, self.select2, self.select3]:

但是因为我用setattr动态添加这些字段,所以我不知道那些字段名称。我尝试将一个列表变量添加到表单并在添加动态字段时附加到该列表但它们显示为:

<UnboundField(IntegerField, ('first',), {'validators': [<wtforms.validators.DataRequired object at 0x7ff75a6d7390>]})>

如果我在上面的示例中引用类似select1的字段,则不是仅仅使用IntegerField:

<wtforms.fields.core.IntegerField object at 0x7fac1bd54910>

如何动态地引用和验证我添加到表单中的这些整数字段?

1 个答案:

答案 0 :(得分:0)

结果在WTForms documentation中进一步挖掘,我本应该使用FieldList。甚至比我可以使用FieldList来封装FieldForms列表更好,这为动态添加字段提供了更大的灵活性。