在DB中存储烧瓶selectmultifield

时间:2020-02-25 12:46:16

标签: flask flask-wtforms

我的 form.py 是这样的:

class QuestionForm(FlaskForm):
    ...
    choices = SelectMultipleField('answer', choices=[('nv', 'Nevada'), ('cl','California'),('la','Los Angeles'], validators=[DataRequired()]) 
    ...
    submit = SubmitField('submit')

为了更出色,我尝试为这些选项创建一个下拉菜单,我的 index.html 如下:

{% extends "base.html" %}


{% block app_content %}
    <h1>Hi, {{ current_user.username }}!</h1>
    ...
    <form action="", method="post">
      {{ form.hidden_tag() }}
      ...
      {{ form.choices.label }} <br>

        <div class="row"> 
          <select class="selectpicker" multiple data-live-search="true" data-actions-box="true">
            {% for values in form.choices %}
            <p> {{ values }}</p>
            {% endfor %}
          </select>
        </div> 
      </p>
      <p>
        {{ form.submit() }}
      </p>
    </form>

{% endblock %}
...

问题是我不知道如何将选择传递给烧瓶中的路线。目前我的 route.py 是这样的:

def myroute():
    form = QuestionForm()
    if form.validate_on_submit():
        ...
        choices=list(filter(None, request.form.getlist('choices')))
        for item in choices:
            choice = Choices(choice=item, ...)
            db.session.add(choice)
            db.session.commit()
       ...

1 个答案:

答案 0 :(得分:1)

您需要为选择字段设置一个名称。 将您的 index.html 更改为此:

<select class="selectpicker" name='choices' multiple data-live-search="true" data-actions-box="true">
{% for values in form.choices %}
{{ values }} 
{% endfor %}