2017-12-23 7 views
1

ラジオ・フィールドを生成するためにwtformsを使用していますが、12個の質問がある場合はラジオ・フィールドのセットを取得するように動的にする必要があります。私はFormFieldを試してみましたが、私が望むものを与えましたが、名前はすべて同じですが、これを行うには良い方法がありますか?アンケートの各要素にラジオ・フィールドを生成

Question 
Radiofield1 radioField1 

Question 
Radiofield2 radioField2 

編集:出力は次のようにする必要があります

私はHTMLフィールドを完了するために、上の移動が、それは本当に参考になります。 私は私が何をしたかのように多くのを覚えていないが、これは私がフィールドをレンダリングすることができ、それに近かったが、idは、私は

オプションにタプルを渡してみましたが、それはのための動的ラジオフィールドをレンダリング変化しませんそれぞれの質問ではなく、それぞれの質問

ための1セットForms.py

class QuestionRadio(FlaskForm): 
    rad=RadioField("rad",choices=[(1,'Yes'),(2,'No')],id="opt") 

class QuestionForm(FlaskForm): 
    options=FieldList(FormField(QuestionRadio),min_entries=1) 

Views.py

#This is the question list 
    question=[(ques.id,ques.question) for ques in Questions.query.all()] 
    form=QuestionForm() 
    #I don't remember what I did after this 

template.html

{% for key,val in question %} 

<h4>key. val</h4> 

{{form.options}} 


{% endfor%} 
+0

はあなたが私達にあなたのコードを表示することができます

これは、ドキュメントからの例ですか? – snakecharmerb

+0

@snakecharmerb完了。 –

答えて

0

wforms documentationはダミークラスを作成し、動的ビューにフィールドを追加することを示唆しています。あなたのケースでは

def my_view(): 
    class F(MyBaseForm): 
     pass 

    F.username = StringField('username') 
    for name in iterate_some_model_dynamically(): 
     setattr(F, name, StringField(name.title())) 

    form = F(request.POST, ...) 
    # do view stuff 

(未テスト)のようになりますコードは:

def my_view(): 
    class QuestionForm(Form): 
     pass 

    for q in Questions.query.all(): 
     field = RadioField(q.question,choices=[(1,'Yes'),(2,'No')],id=q.id) 
     setattr(QuestionForm, q.id, field) 

    form = QuestionForm(request.POST, ...) 
    # do view stuff 
+0

テンプレートでこれをレンダリングする方法を教えてください、私もこれを試しましたが、それを表示する方法を理解できませんでした –

関連する問題