我正在尝试使用多个条目创建一个简单的是/否回复表单。我有一个拥有1,000个名字的数据库,并允许团队经理对所有团队成员回答是/否。然而,每个是/否响应将存储在与该特定人员对齐的单独表中。每个用户在数据库中都有唯一的ID。我不知道如何使用flask和wtforms创建动态单选按钮名称。
rsvp.html:
<table border=1>
<tr>
<th width="300">Name</th>
<th width="200">Accept</th>
<th width="200">Decline</th></tr>
{% for guest in guests %}
<tr><td align="center">
{{ guest.first_name }} {{ guest.last_name }}
</td>
{% for subfield in form.name1 %}
<td align="center">
{{ subfield }}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
显然这不起作用,因为如果您列出了6个团队成员,则所有单选按钮都将具有name =“name1”。我需要将单选按钮名称与该用户的ID相关联,可能是name =“name23”,name =“name67”等。其中23和67是数据库中的两个ID。
forms.py:
class RsvpForm(Form):
name1 = RadioField('', choices=[('yes','YES'), ('no','NO')])
name2 = RadioField('', choices=[('yes','YES'), ('no','NO')])
submit = SubmitField("Submit RSVP")
def __init__(self, *args, **kwargs):
Form.__init__(self, *args, **kwargs)
def validate(self):
if not Form.validate(self):
return False
else:
return True
views.py:
@app.route('/rsvp', methods=['GET', 'POST'])
def rsvp():
form = RsvpForm()
if 'guestid' not in session:
return redirect(url_for('login'))
guests = Guest.query.filter_by(team=session['team']).all()
if request.method == 'POST':
if form.validate_on_submit():
for i in guests:
gid = i.id
rsvpi = Rsvp(gid, form.name['gid'].data)
db.session.add(rsvpi)
db.session.commit()
return redirect(url_for('rsvp'))
else:
return "Form didn't validate"
return render_template('rsvp.html', form=form, guests=guests)