如何使用自定义验证器动态地将输入字段添加到表单?
How to add input fields to a form dynamically with custom validator?
我有一个表单,在视图中动态添加了一些整数字段,这些字段供用户从 1 到 N 进行排名。我很难弄清楚如何编写一个验证器来确保 reach field.data 具有唯一值并且从 1 到 N。
我已经弄清楚如何根据 wtforms' docs, but I'd like to validate them all against each other like this question 将字段动态添加到表单,但我还没有弄清楚如何在覆盖的 validate
函数中正确引用动态字段。
如何在验证器中引用表单实例中的动态字段?在上面链接的问题中,他们在行中这样做:
for field in [self.select1, self.select2, self.select3]:
但是由于我使用 setattr
动态添加这些字段,所以我不知道这些字段名称。我尝试将列表变量添加到表单并在添加动态字段时附加到该列表,但它们显示为:
<UnboundField(IntegerField, ('first',), {'validators': [<wtforms.validators.DataRequired object at 0x7ff75a6d7390>]})>
如果我在上面的示例中引用 select1
之类的字段,而不只是 IntegerFields:
<wtforms.fields.core.IntegerField object at 0x7fac1bd54910>
如何一起引用和验证我动态添加到表单中的这些整数字段?
结果是在 WTForms documentation 中更深入地挖掘,我应该一直在使用 FieldList。甚至更好的是,我可以使用 FieldList 来包含 FieldForm 列表,这为动态添加字段提供了更多的灵活性。
我有一个表单,在视图中动态添加了一些整数字段,这些字段供用户从 1 到 N 进行排名。我很难弄清楚如何编写一个验证器来确保 reach field.data 具有唯一值并且从 1 到 N。
我已经弄清楚如何根据 wtforms' docs, but I'd like to validate them all against each other like this question 将字段动态添加到表单,但我还没有弄清楚如何在覆盖的 validate
函数中正确引用动态字段。
如何在验证器中引用表单实例中的动态字段?在上面链接的问题中,他们在行中这样做:
for field in [self.select1, self.select2, self.select3]:
但是由于我使用 setattr
动态添加这些字段,所以我不知道这些字段名称。我尝试将列表变量添加到表单并在添加动态字段时附加到该列表,但它们显示为:
<UnboundField(IntegerField, ('first',), {'validators': [<wtforms.validators.DataRequired object at 0x7ff75a6d7390>]})>
如果我在上面的示例中引用 select1
之类的字段,而不只是 IntegerFields:
<wtforms.fields.core.IntegerField object at 0x7fac1bd54910>
如何一起引用和验证我动态添加到表单中的这些整数字段?
结果是在 WTForms documentation 中更深入地挖掘,我应该一直在使用 FieldList。甚至更好的是,我可以使用 FieldList 来包含 FieldForm 列表,这为动态添加字段提供了更多的灵活性。