2013-01-06 2 views
2

Я сделал SelectField так:колба-WTF выбор 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') 

Итак, когда вы загружаете страницу, это показывает выбор. Я выбираю этот выбор, нажимаю кнопку «Отправить», и он говорит «это не правильный выбор», и он освобождает поле выбора.

Затем, когда вы обновляете страницу, это как если бы код был сломан, и он больше не отображает варианты ... Это пустое поле выпадающего меню/выбора.

Что я делаю неправильно?

EDIT: По какой-то причине, когда вы помещаете iteritems в представление вместо формы, все работает. Какая-то причуда с Flask-WTF, где, если вы не используете свой формат, кажется, что удалили выбор после отправки формы.

ответ

9

Возможно, проблема заключается в том, что ваши ключи в dict являются строками. Я имел эту проблему раньше, так что, возможно, что-то вроде это помогло бы:

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

Это coerce штучка помог. Что происходит, я думаю, что все данные POST являются unicode и по умолчанию coerce также равно unicode (по крайней мере, в формах WTF, необходимо проверить расширение Flask-WTF, если вы его используете). И ваши ключи выбора - это строки.

+1

Когда я добавляю 'print (« pre choice », self.choices, self.data)' in 'pre_validate'. Моя ситуация получила: '(u'pre choice ', [(1,' Question '), (2,' Artical '), (3,' movie ')], u'2').'. Я думаю, когда это не получилось. У него всегда есть причина. – jiamo

0

Вы передаете набор вместо dict. Замените запятые в вашем определении QUESTION_LIST двоеточиями. На самом деле призыв к .iteritems() должен уже не в состоянии ...

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

Извините, что вы правы Я неправильно написал псевдокод. Я правильно написал его в фактическом коде. Так что это правильно - все равно не работает. Моя ошибка отличается, поэтому итеративы не терпят неудачу. – Dexter

0

По какой-то причине, когда вы кладете iteritems в представлении вместо формы, все работает. Какая-то причуда с Flask-WTF, где, если вы не используете свой формат, кажется, что удалили выбор после отправки формы.

Итак, просто переместите код .iteritems() в VIEW, набрав форму .question_field.choices = QUESTION_LIST ['QuestionOne']. Iteritems(); Работает лучше, чем использование iteriterms внутри файла формы.

Смежные вопросы