FlaskForm重写单个提交的多个输入字段

时间:2018-02-03 18:12:01

标签: python flask flask-wtforms

使用FlaskForm和SelectMultipleField,我正在创建一个选择表,允许对多个选择进行排名:1,2,3,....

为了将选择放在表格中的网格图案中,我将每行作为自己的SelectMultipleField实例。

提交按钮仅返回SelectMultipleField(狗)的第一个实例的值。

如何让Select按钮在SelectMultipleField的所有实例中返回值?

这是我的表单模块中的类:

class LPRForm(FlaskForm):
    party = ['Dogs', 'Cats', 'Rabbits', 'Birds']
    dog = [('', 'D. Duke'), ('', 'R. Rusty'), \
             ('', 'T. Tucker'), ('', 'R. Roger')]
    cat = [('', 'S. Shadow'), ('', 'M. Misty'), \
             ('', 'P. Patch'), ('', 'P. Paws')]
    rabbit = [('', ''), ('', 'C. Clover'), ('', ''), ('', '')]
    bird = [('', 'P. Pikachu'), ('', 'S. Starburst'), \
              ('', ''), ('', 'F. Flighty')]

    vote_dog = SelectMultipleField('District', choices=dog, 
                        option_widget=widgets.TextInput() )
    vote_cat = SelectMultipleField('District', choices=cat, 
                        option_widget=widgets.TextInput() )
    vote_rabbit = SelectMultipleField('District', choices=rabbit, 
                        option_widget=widgets.TextInput() )
    vote_bird = SelectMultipleField('District', choices=bird, 
                        option_widget=widgets.TextInput() )

    submit = SubmitField('Cast Ballot')

这是html文件的相关部分:

<table style="width:100%" align="center">
    <tr>
    <td>  </td>
    {% for vote in form.vote_dog %}
        {% if vote.label != '': %}
            <td>{{ vote(size="2") }}</td> <td>{{ vote.label }}</td>

        {% endif %}
    {% endfor %}
    </tr>

    <tr>
    <td>  </td>
    {% for vote in form.vote_cat %}
        {% if vote.label != '': %}
            <td>{{ vote(size="2") }}</td> <td>{{ vote.label }}</td>

        {% endif %}
    {% endfor %}
    </tr>

    <tr>
    <td>  </td>
    {% for vote in form.vote_rabbit %}
        {% if vote.label != '': %}
            <td>{{ vote(size="2") }}</td> <td>{{ vote.label }}</td>

        {% endif %}
    {% endfor %}
    </tr>

    <tr>
    <td>  </td>
    {% for vote in form.vote_bird %}
        {% if vote.label != '': %}
            <td>{{ vote(size="2") }}</td> <td>{{ vote.label }}</td>

        {% endif %}
    {% endfor %}
    </tr>
</table>
</td>
</tr>

{{ form.submit }}

视图模块:

@app.route('/lpr', methods=['GET', 'POST'])
def lpr():
    form = LPRForm() 
    return render_template('lpr.html', title='Home', form=form)

1 个答案:

答案 0 :(得分:0)

我能够通过使用FormField来实现这一目标。但是,文档提供了一个默认分隔符-。另外,我明确指出separator='-',但只有当我使用.作为分隔符时,在调用类时,它才能正常工作,...即使使用separator='-'