那麽,為了得到壹個,動態的表單,就是所謂的不定數量的表單,簡單理解就是它的類屬性是動態的
所以,我沒有采用寫在壹個文件的,固定的類(可以看看它的官方網站的例子,就是這個)
我是在控制器裏,動態構建,,,如下的,是我壹個自己的項目裏用的方法,可以參考下:
class ProductSkuForm(Form):
attr = dict()
for i in data['pro_category_info']['attribute_list']:
attr[i['name']] = StringField(i['title'], [validators.InputRequired(i['title']+u'必填')], description=i['title'])
locals().update(attr)
price = DecimalField(u'產品庫存價格:',
[validators.DataRequired(u'產品庫存價格為必填項,請正確填寫'),
validators.NumberRange(min=1, message=u'請填寫正確價格(最小為1)')],
places=2, description=u'產品價格')
stock = IntegerField(u'庫存數:', [validators.InputRequired(u'產品庫存數必填')], description=u'產品庫存數量')
排版不好,,不懂知乎的排版,,將就下看著吧
這是我的壹個微商系統裏使用的,為了動態構建SKU時所用的,核心就前面的幾句
attr = dict() #產品屬性字典
for i in data['pro_category_info']['attribute_list']:
attr[i['name']] = StringField(i['title'], [validators.InputRequired(i['title']+u'必填')], description=i['title'])
# 通過前面的從數據庫裏,讀取的,用戶自己建的產品屬性,,對產品屬性字典構造
locals().update(attr) # 核心,通過locals().update函數更新類內部變量
後面就是兩個,固定的類屬性價格和庫存
另壹個,更好的方法,應該是用Python的多重繼承來實現,,因為,wtforms的官方網站裏,就有例子,它的表單類,是可以繼承的(下面是復制的wtforms的官方網站)
Form Inheritance
Forms may subclass other forms as needed. The new form will contain all fields of the parent form, as well as any new fields defined on the subclass. A field name re-used on a subclass causes the new definition to obscure the original.
class PastebinEdit(Form):
language = SelectField(u'Programming Language', choices=PASTEBIN_LANGUAGES)
code = TextAreaField()
class PastebinEntry(PastebinEdit):
name = StringField(u'User Name')
可以看到PastebinEntry繼承了PastebinEdit類後,它就是3個屬性了,那麽,在控制器裏,動態的,讓壹個類,多重繼承,就可以得到壹個動態的表單了,這個還只是想法,,還沒有自己實現過,,不過,應該是可以實現的,,妳可以試下