2016-05-02 16 views
-1

フラスコアプリを作成して、views.pyのページからmy form.pyページに辞書を渡す際に問題が発生しました。辞書は、アップロードされたデータに基づいて動的に作成されます。今のところそれはハードコードされています。私はフィールドの動的な数を作成するために渡す必要があります。辞書をwtformsに渡すforms.py(* args、** kwargs)

views.py

select_dict = {'Geography': ['US', 'Asia', 'Europe'], 'Product Type': ['X', 'Y', 'Z']} 
form = F(request.form,select_dict) 

form.py

class SimpleForm(Form): 
    list_of_files = ['Option 1','Option 2','Option 3','Option 4','Option 5','Option 6'] 
    files = [(x, x) for x in list_of_files] 
    acheckbox = MultiCheckboxField('Label',choices=files) 
    third_list = ['Special Analysis'] 
    third_files = [(x, x) for x in third_list] 
    bcheckbox = MultiCheckboxField('Label', choices=third_files) 
    category_1 = SelectField(u'', choices=()) 
    category_2 = SelectField(u'', choices=()) 
    category_3 = SelectField(u'', choices=()) 

class F(SimpleForm): 
    pass 

    def __init__(self, select_dict, *args, **kwargs): 
     super(SimpleForm, self).__init__(*args, **kwargs) 
     print(select_dict) 
     for name,choices in select_dict.items(): 
      test = [(x, x) for x in choices] 
      setattr(F, name, SelectMultipleField(name.title(),choices=test)) 

Iの形でselect_dictを定義するだけループ "のために" を含む場合、コードが動作します。今すぐこのエラーが発生します: "formdataは、 'getlist'メソッドをサポートするマルチダイレクト型ラッパーにする必要があります。

+0

最初に 'select_dict'を取るように' __init__'を定義しましたが、最初に 'request.form'を渡しています。 – davidism

+0

あなたは正しいです。それがそれを解決しました。 –

答えて

0

Per @davidismフォームの順序を入れ替えました。正しい方法は以下の通りです:

form = F(select_dict,request.form) 
関連する問題