2013-07-06 21 views
0

我正在Flask應用程序上做一些事件調度。我在我的表單中遇到了WTForms QuerySelectMultipleField的問題。WTForms QuerySelectMultipleField不發送列表

forms.py

class EnterEvent(Form): 
... 
invitees = QuerySelectMultipleField('Invitees', query_factory=lambda: 
          models.User.query.order_by(models.User.name).all()) 

,並在我的初始化 .py文件,我解析表單POST數據。爲了測試我試圖返回request.form ['invitees']來查看傳遞的內容。最終我想驗證數據並將其添加到我的SQLite3數據庫。

@app.route('/event', methods=['POST', 'GET']) 
def addEvent(): 
    form = EnterEvent() 
    if request.method == 'POST': 
     ... 
     invitees = request.form['invitees'] 
     return invitees 

的WTForm文檔說,QuerySelectMultipleField應該返回與ORM模型實例的列表,但是當我解析POST請求,我沒有得到一個列表。我在瀏覽器中檢查了POST數據,它看起來像我選擇多個對象時發送多個對象。

我似乎無法弄清楚這一點。任何幫助將不勝感激!

回答

0

你會得到你的ORM模型實例,如果你直接查詢您的form的對象,而不是這就是請求對象

的一部分,假設你的「原始」形式的數據正在使用燒瓶WTF與它的內置小幫手它,你的invitees行應該真的讀取invitees = form.invitees.data

+0

謝謝!我不知道你可以從查詢表單中獲得ORM實例。我以爲你只能解析原始的POST數據。這是一個巨大的幫助。 – Ptrkcon

+0

爲什麼不使用相同的方法從表單中獲取所有字段,而不是像request.form ['whatever']那樣獲取'原始'數據? – Ptrkcon

+0

你總是會使用'form.field_name.data'約定,否則你實際上並沒有使用WTForms的好東西。理想情況下,你應該真的在做'if form.validate_on_submit():'而不是'if request.method =='POST',因爲前者實際上使用了你在表單數據上設置的任何wtf驗證。 – Doobeh