【问题标题】:How to add input fields to a form dynamically with custom validator?如何使用自定义验证器动态地将输入字段添加到表单中?
【发布时间】:2018-06-29 20:13:23
【问题描述】:

我有一个表单,在视图中动态添加了几个整数字段,这些字段供用户从 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 这样的字段,而不仅仅是 IntegerFields:

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

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

【问题讨论】:

    标签: python validation flask wtforms flask-wtforms


    【解决方案1】:

    原来在WTForms documentation 中挖掘得更近一点,我应该一直使用FieldList。甚至比我可以使用 FieldList 来包含 FieldForms 列表更好,这为动态添加字段提供了更多的灵活性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-17
      • 2017-07-26
      • 2021-12-23
      • 2012-07-17
      • 2020-02-09
      • 2012-09-29
      • 2019-04-21
      • 1970-01-01
      相关资源
      最近更新 更多