0
我正在構建一個允許管理員用戶向數據庫添加「問題」的系統。每種類型的問題都有一個與之關聯的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
每個實例提供可配置的驗證選項,例如想象一下,如果我的問題模型擴展:
class Question(db.Model):
# ... other fields
min_length = db.Column(db.Integer, nullable=True)
max_length = db.Column(db.Integer, nullable=True)
會是什麼,因爲最小/最大長度會有所不同(或失蹤),對每個問題的適當辦法讓我的表單字段中的value
領域WTForms長度驗證?
我的意思是我覺得這比你做出來的要複雜一些。首先,字段會更好,因爲靜態類的屬性,否則你會一直存儲在數據庫中,他們會受到sql操作。其次,當原始表單數據進來時,您需要知道表單數據所涉及的Question類。您可能最好只提交一個引導自定義字段驗證程序的附加字段,以關於該類型問題的某些特殊處理字段。那麼你只需要一個問題模型。 – nsfyn55 2014-05-29 16:30:49