管理者ユーザーがデータベースに「質問」を追加できるシステムを構築しています。各タイプの質問には、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
、たとえば、質問モデルが拡張された場合を想像して、のインスタンスごとに構成可能な検証オプションを提供する必要があります。
class Question(db.Model):
# ... other fields
min_length = db.Column(db.Integer, nullable=True)
max_length = db.Column(db.Integer, nullable=True)
value
質問ごとに最小/最大長が異なる(または欠落している)場合、フォームフィールド内のフィールドにWTForms長さバリデーターを配置する適切な方法は何でしょうか?