2016-07-07 8 views
2

jinjaテンプレートを使用してフィールドを選択するには、デフォルトのオプション値を追加する必要があります。jijaテンプレートを使用して選択フィールドのデフォルトオプションを設定する方法

form.py

class TeamForm(Form): 
    user = SelectField(u'Team Member') 

views.py

class myview(request,id): 
    form = TeamForm(request.form) 
    members =db.session.query(teams).filter_by(t_id = id).all() 
    return render_template("members.html",form=form,members=members) 

member.html

<table> 
{% for member in members%} 
<tr> 
    <td>{{ form.user(class_="form-control",value=user.id) }}</td> 
</tr> 
{% endfor %} 
</table> 

割り当てオプションの値は、出力には示されていません。

チーム内のメンバーに応じて選択フィールドをループする必要があります。 たとえば、3人のメンバーを持つチームの場合、3人のメンバーによって自動的に選択された3つの選択フィールドが表示されます。

どれでもお手伝いできますか?前もって感謝します。

+0

あなたSelectField定義に '選択肢' を提供しないのはなぜ? –

+0

選択肢が動的なためです。各チームはメンバーが異なるため、選択肢が変更されるたびに変更されます。 – neelima

+0

あなたはmyviewでこのような動的選択を生成することができますhttp://stackoverflow.com/questions/12850605/how-do-i-generate-dynamic-fields-in-wtforms –

答えて

0

現在地プレーで2つの質問があります

(1)だけform.py.でSelectFieldクラスのdefault=(value, label)オプションを使用して、フォームのデフォルト値を実装するには

は、あなたのチームメンバーとそのオプションの数値としてジョニーをデフォルトにしたいと仮定し、あなたがdefault=(value, label)を使用して、このような何かを行うことができます0です:だけでタプルを渡し

class TeamForm(Form): 
    user = SelectField(u'Team Member', default=(0, "Johnny")) 

フォーム(値、ラベル)。あなたの値はint、文字列、何でもかまいません。 (Submitボタンもありません。私は偶然であると想定しています。)

(2)あなたの意見では何をしているのか分かりません。チームのメンバーに応じて選択フィールドをループする必要があります。たとえば、3人のメンバーを持つチームの場合、3人のメンバーが自動選択した3つの選択フィールドを表示します。フォームをレンダリングするときに、ドロップダウン・フィールドのユーザーにこれらを表示するか、テンプレートのレンダリング時に実際に照会結果を表示するのに問題があるとしていますか?

あなたはフォームを使用しているので、私はあなたがPOST経由でサーバーにデータを送信することを前提としています。典型的なビューパターンは空白のフォームオブジェクトを作成し、テンプレートがGET要求を介してレンダリングされたときにそのオブジェクトをユーザーに渡します。ユーザーがデータを入力して送信すると、POST要求を介して送信されます。あなたの意見にクラスを使用していることに気付きました。ルーティングの代わりにデコレータを使用して、関数を呼び出すようにしてください。

form.py:

たとえば、あなたがあなたの形で劇中の3つのオプションを持っていて、ドロップダウンでユーザーにそれらを表示したい、場合は、このような何かを実装したいと思います:

# Sample Form class; choices can be overridden later. 

     class TeamForm(Form): 
      user = SelectField(u'Team Member', default=(0, "Johnny"), choices=[(0, "Johnny"), (1, "Sarah"), (2, "Bill")]) 
      submit= SubmitField('Submit') 

view.py

@app.route('/team', methods=['GET','POST']) 
def team_view(id): 
    user_selection = None 
    form = TeamForm() 
    # This code block will only execute on POST 
    if request.method == 'POST': 
      if form.validate_on_submit(): 
       user_selection = form.user.data 
       form.user.data = '' 
       return redirect(url_for(some-other-page.html)) 
    members =db.session.query(teams).filter_by(t_id = id).all() 

    # This next line will override the default choices in your form. 
    form.user.choices = [(member.id, member.name) for member in members] 

    return render_template("members.html",form=form) 

メンバー。HTML

オプション1:

<!-- Assume you're using Flask-Bootstrap & WTForms --> 
    {% import "bootstrap/wtf.html" as wtf %} 

    <!-- Render your Team form; this is where you call to your form object --> 
    {{ wtf.quick_form(form) }} 

オプション2:

<!-- Manually construct your template --> 
<form method="POST" action="/team"> 
    <div>{{ form.user }}</div> 
    <div>{{ form.submit() }}</div> 
</form> 
+0

ここに5人のユーザーがいます。これらの5人のユーザーは選択肢ですが、3人のメンバーを持つチーム 'A'は1,2,5人です。残りのユーザーはチームに属していません。チームAの3人のメンバーを表示する必要があります。詳細select-field1 --->は---> 1、select-field2 --->は---> 2、select-field3 ---> ---> 5を示します。 – neelima

+0

現在私はドロップダウンでユーザーを表示していますが、私の問題は「3人のチームメンバーが選択フィールドの選択値です」です。今私の考えを理解することができます。ありがとう。 – neelima

+0

私は提案したコードを編集しようとしました。私が何をしたかを見てください。がんばろう! – Malcriado415

関連する問題