如何使用flask和wtforms命名动态单选按钮?

时间:2014-02-28 03:10:28

标签: python flask wtforms flask-wtforms

我正在尝试使用多个条目创建一个简单的是/否回复表单。我有一个拥有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)

0 个答案:

没有答案