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

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 列表,这为动态添加字段提供了更多的灵活性。