2013-01-06 48 views
2

我犯了這樣的一個SelectField:燒瓶跆拳道selectField選擇無效

# constants.py 
QUESTION_LIST = {} 
QUESTION_LIST['QuestionOne'] = { 'disagree-strong': "Strongly Disagree", 'agree-strong': "Strongly Agree" } 

#forms.py 
from constants import * 
typeone = SelectField('QuestionOne', 
     choices=QUESTION_LIST['QuestionOne'].iteritems(), 
     description='Answer the question') 

所以,當加載頁面,它顯示了選擇。我選擇了這個選項,按提交,它會顯示「這不是一個有效的選擇」,並且它將空白選擇字段。

然後,當你刷新頁面,就好像代碼被破壞,它不再顯示選擇...這是一個空的下拉/選擇字段。

我在做什麼錯?

編輯:出於某種原因,當你把iteritems視圖而不是形式,一切正常。 Flask-WTF的一些怪癖,如果你不使用他們的格式,它似乎在你提交表單後刪除選項。

回答

9

也許問題是,你的鍵字典是一個字符串。我以前有這個問題,所以也許會有這樣的幫助:

typeone = SelectField("Question1", coerce=str, choices=QUESTION_LIST['QuestionOne']) 

coerce的thingie幫助。我認爲所有POST數據都是unicode,並且默認coerce也等於unicode(至少在WTF表單中,如果使用的話需要檢查Flask-WTF擴展)。而你的選擇鍵是字符串。

+1

當我在'pre_validate'中添加print(「pre choice」,self.choices,self.data)'。我的情況是:'(u'pre choice',[(1,'Question'),(2,'Artical'),(3,'movie')],u'2')。'。我想當它失敗時,它總是有它的理由。 – jiamo

0

您正在傳遞一個集合而不是字典。用冒號替換您的QUESTION_LIST定義中的逗號。其實調用.iteritems()應該已經失敗......

QUESTION_LIST['QuestionOne'] = { 'disagree-strong': "Strongly Disagree", 
           'agree-strong': "Strongly Agree" } 
+1

對不起,你是對的我錯誤地寫了僞代碼。我在實際代碼中正確寫入了它。所以這是正確的 - 仍然無法正常工作。我的錯誤是不同的,這就是爲什麼iteritems沒有失敗。 – Dexter

0

出於某種原因,當你把iteritems視圖,而不是形式,一切正常。 Flask-WTF的一些怪癖,如果你不使用他們的格式,它似乎在你提交表單後刪除選項。因此,只需通過輸入form.question_field.choices = QUESTION_LIST ['QuestionOne']。iteritems();將.iteritems()代碼移動到VIEW中。比在表單文件中使用iteriterms更好。