2

私は次のような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のある種の癖で、フォーマットを使用しないと、フォームを送信した後に選択肢が削除されるように見えます。

4

3 に答える 3

9

おそらく問題は、dict のキーが文字列であることです。私は以前にこの問題を抱えていたので、次のようなものが役立つかもしれません:

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

このcoerceことは役に立ちました。すべての POST データは Unicode であり、デフォルトでは Unicode と等しいと思いますcoerce(少なくとも WTF フォームでは、使用する場合は Flask-WTF 拡張機能を確認する必要があります)。選択キーは文字列です。

于 2013-01-07T06:21:27.550 に答える
0

何らかの理由で、フォームの代わりにイテアイテムをビューに配置すると、すべてが機能します。Flask-WTF には、フォームを送信した後にその形式を使用しないと選択肢が削除されるように見えるという、ある種の癖があります。

form.question_field.choices = QUESTION_LIST['QuestionOne'].iteritems(); と入力して、.iteritems() コードを VIEW に移動するだけです。フォーム ファイル内で iteriterms を使用するよりもうまく機能します。

于 2013-01-07T00:48:29.657 に答える
0

辞書の代わりにセットを渡しています。定義内のコンマQUESTION_LISTをコロンに置き換えます。実際には、への呼び出し.iteritems()はすでに失敗しているはずです...

QUESTION_LIST['QuestionOne'] = { 'disagree-strong': "Strongly Disagree",
                                 'agree-strong': "Strongly Agree" }
于 2013-01-06T20:55:21.117 に答える