2016-02-27 60 views
0

當前我正在嘗試創建一個表單,用戶可以在其中創建閃存卡,並且沒有一定數量的閃存卡 - 您可以添加或刪除它們。在WTForms中創建可變數量的表單字段

我試圖使用FormFieldsFieldList,其中FormField是閃存卡的一種形式。但是,我不完全瞭解這是如何工作的(文檔不是很有用),並且不能創建可變數字FormFields

此外,我嘗試循環通過for循環,並在每次迭代創建一個新的FormField,但是,我似乎無法單獨訪問每個字段的數據(我只獲得第一個字段的數據)。

如果有人能夠爲這些方法或新方法提供修復,我將不勝感激。

回答

0

我假設每個閃存卡都有一個標題和一些內容。在這種情況下最有意義的表單字段的類型是來自WTForms的TextFieldTextAreaField。由於您正在使用Flask-WTForms,因此您需要繼承基礎對象Form

from flask.ext.wtf import Form 
from wtforms import TextField, TextAreaField 

class FlashCard(Form): 
    title = TextField('Card title:') 
    content = TextAreaField('Card content:') 

當你調用這個在燒瓶視圖功能:

@app.route('/') 
def index(): 
    my_form = FlashCard() 
    if my_form.validate_on_submit: 
    # save flash card data here. 
    return render_template('index.html', my_form=my_form) 

如果我是你,我會用一個模式的形式。 Bootstrap有一個很容易使用的模式(需要Javascript)。另一種選擇是在用戶想要添加閃存卡時重定向到表單頁面。

重點是您可以對所有閃存卡使用相同的表單實例。希望這可以幫助。

如果你真的需要 「動態形式組成」,它是這樣的(from wtforms doc's):

def my_view(): 
    class F(MyBaseForm): 
     pass 

    F.username = StringField('username') 
    for name in iterate_some_model_dynamically(): 
     setattr(F, name, StringField(name.title())) 

    form = F(request.POST, ...) 
    # do view stuff