2016-07-14 10 views
1

ムービー評価アプリでは、動的なフィールド数のフラスコでWTFフォームを生成したいと考えています。すなわち、3つの映画がある場合、3つのフィールドが存在する。動的フォームFlask

は、私はいくつかのオプションについて考え、それらのどれも働いた:

class RatingForm(Form): 
    rating = TextField("rating",[validators.Length(min=1, max=1)]) 
    movie_order=TextField("movie",[validators.Length(min=1, max=1)]) 
    submit = SubmitField("submit rating") 
  1. は、フォームオブジェクトにパラメータを渡す - 私は、この種のにパラメータを渡すことができますどのように表示されませんクラス

  2. テンプレート内でループを作成し、複数のフォームを生成して返し、正しいものを選択します。 request.formはimmutableDictなので、これはうまくいきません。同じキーを持つ複数のフィールドを持つことになります。このキーはアクセスできません。

    {% for movie in movies_to_rate %} 
        <p> 
        <form method="POST" enctype="multipart/form-data" action="/rate"> 
        {{ movie}} 
        {{ forms[movie].rating}} 
        {{ forms[movie].submit }} 
        <input type="submit" value="Go"> 
    
    </p> {% endfor %} 
    

私が何ができるかについての任意のアイデア?

+0

あなたは[この]を経て完全に動的な制御を持つことができます(http://wtforms.readthedocs.io/en/latest/specific_problems .html#dynamic-form-composition)、あなたの問題に対してより良い解決策がないかどうかはわかりません。 – syntonym

+0

@syntonymありがとうございましたが、私はフラスコにもっと関連した何かを探していました... – Shgidi

+0

野生の推測ですが、テンプレートにフォームインスタンスのリストを渡すことができますか? – iScrE4m

答えて

0

1つのフィールドオブジェクトを使用する代わりに、クラスメンバーとしてTextFieldのリストを生成できると思います。 (それは少し奇妙に見えますが、私はあなたのバリデータは、あなたが何を意味するかあると仮定します。)

class RatingForm(Form): 
    def __init__(self, count): 
     self.ratings = [TextField("rating_" + str(i), [validators.Length(min=1, max=1)]) 
        for i in range(count)] 
     ...