Sie haben zwei Fragen im Spiel hier:
(1) Um die Standardwerte in Ihrer Form zu implementieren, verwenden Sie einfach die default=(value, label)
Option für die SELECT Klasse in form.py.
Angenommen, Sie zu Johnny als Teammitglied und dem numerischen Wert dieser Option auf Standard wollen, ist 0. Dann können Sie etwas tun default=(value, label)
mit:
class TeamForm(Form):
user = SelectField(u'Team Member', default=(0, "Johnny"))
in einem Tupel Geben Sie einfach in die Form (Wert, Label). Ihre Werte können Ints, Strings, was auch immer sein. (Sie vermissen auch eine Absenden-Schaltfläche, von der ich annehme, dass sie zufällig ist.)
(2) Ich bin mir nicht sicher, was Sie in Ihren Ansichten tun. Sie sagen: "Hier muss ich die Auswahlfelder in Abhängigkeit von den Mitgliedern im Team wiederholen. Wenn zum Beispiel ein Team drei Mitglieder hat, werde ich das drei Auswahlfeld anzeigen, das von diesen drei Mitgliedern automatisch ausgewählt wird." Sagen Sie, dass Sie diese beim Rendern des Formulars nur in einem Dropdown-Feld dem Benutzer anzeigen müssen, oder haben Sie Probleme beim Anzeigen der Abfrageergebnisse für den Benutzer, wenn die Vorlage gerendert wird?
Da Sie ein Formular im Spiel haben, gehe ich davon aus, dass Sie Daten über einen POST an einen Server senden werden. Ein typisches Ansichtsmuster erstellt ein leeres Formularobjekt und übergibt es an den Benutzer, wenn die Vorlage über eine GET-Anforderung gerendert wird. Wenn der Benutzer Daten eingibt und übermittelt, wird es über eine POST-Anfrage gesendet. Ich habe auch bemerkt, dass du eine Klasse für deine Ansichten benutzt hast. Ich schlage vor, stattdessen einen Decorator für Ihr Routing zu verwenden und eine Funktion aufzurufen.
Wenn, sagen wir, drei Möglichkeiten im Spiel in der Form haben, und Sie wollen, dass sie in einem Dropdown-Menü Ihren Benutzer zeigen, dann werden Sie etwas implementieren möchten:
form.py :
# 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)
Mitglied.html
Option 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) }}
Option 2:
<!-- Manually construct your template -->
<form method="POST" action="/team">
<div>{{ form.user }}</div>
<div>{{ form.submit() }}</div>
</form>
Warum Sie bieten keine 'Entscheidungen', um Ihre SELECT Definition? –
Wegen der Auswahl sind dynamisch. Jedes Team hat unterschiedliche Mitglieder, so dass jedes Mal die Auswahl geändert wird. – neelima
Sie können dynamische Auswahlen in Ihrem myview wie dieses erzeugen http://stackoverflow.com/questions/12850605/how-do-i-generate-dynamic-fields-in-wtforms –