WTForms动态表单,可配置验证

时间:2013-02-21 18:36:06

标签: python flask wtforms flask-wtforms

我正在构建一个允许管理员用户向数据库添加“问题”的系统。每种类型的问题都有一个与之关联的WTForms对象。为了显示页面,我循环遍历所有问题,并为每个问题生成一个由表单字段组成的表单。

class TextQuestionForm(Form):
  value = TextField("Value", validators=[])

class Question(db.Model):
  # sqlAlchemy model using single table inheritance
  def field_name(self):
    return "question_%s" % self.id

class TextQuestion(Question):
  form = TextQuestionForm


def get_form(page_id):
  questions = Question.query.filter(Question.page_id == page_id).all()

  class F(Form):
    pass

  for q in questions:
    setattr(F, q.field_name(), FormField(q.form))

  return F()

这适用于对于给定问题类型的所有验证都相同的简单情况,但我需要为Question的每个实例提供可配置的验证选项,例如,想象我的问题模型是否已扩展:< / p>

class Question(db.Model):
  # ... other fields
  min_length = db.Column(db.Integer, nullable=True)
  max_length = db.Column(db.Integer, nullable=True)

如果每个问题的最小/最大长度不同(或缺失),那么在我的表单字段中将WTForms长度验证器放到value字段上的适当方法是什么?

1 个答案:

答案 0 :(得分:0)

完全控制验证 您可以创建继承TextField的自定义字段 并重新定义pre_validate方法

def pre_validate(self, form=None)

并且在该功能内部,您可以进行所需的所有检查

http://wtforms.simplecodes.com/docs/0.6/fields.html#wtforms.fields.Field.pre_validate

相关问题