从多个选择表单中捕获值并通过Flask进行POST

时间:2018-08-23 19:21:36

标签: python-3.x mongodb flask

我需要捕获多个选择表单vlaue(从MongoDB集合生成)并通过Flask路由POST到另一个MongoDB集合:recipes

以下是相关表格div:

<form action="{{ url_for('insert_recipe') }}" method="POST" class="col s12">
    ...

        <div class="input-field col s6 l6">
            <i class="material-icons prefix">warning</i>
            <select multiple id="allergen_name" name="allergenlist">
                <option value="" disabled selected>Choose allergens</option>
                {% for allergen in allergens %}
                <option value="{{allergen.allergen_name}}">{{allergen.allergen_name}}</option>
                {% endfor %}
            </select>
        </div>
    </div>

    ...

</form>

我想捕获选定的选项并通过Flask发布它们:

# Get all recipes
@app.route('/get_recipes')
def get_recipes():
    return render_template("recipes.html", 
    recipes=mongo.db.recipes.find())

# Render HTML form
@app.route('/add_recipe')
def add_recipe():
    return render_template('addrecipe.html',
    users=mongo.db.users.find(),
    allergens=mongo.db.allergens.find(),
    cuisines=mongo.db.cuisine.find(),)

# Send the form    
@app.route('/insert_recipe', methods=['POST'])
def insert_recipe():
    recipes =  mongo.db.recipes
    recipes.insert(request.form.to_dict())
    return redirect(url_for('get_recipes'))

但是,只有第一个选定的选项被捕获并发送。

任何帮助将不胜感激。

编辑: 观看时:http://werkzeug.pocoo.org/docs/0.12/datastructures/#werkzeug.datastructures.MultiDict.to_dict

...据称我需要设置to_dict(flat=false)才能返回所有dict的值。

1 个答案:

答案 0 :(得分:0)

请参见上面的EDIT,正确的方法是:

# Send the form     
@app.route('/insert_recipe', methods=['POST'])
def insert_recipe():
    recipes =  mongo.db.recipes
    recipes.insert_one(request.form.to_dict(flat=False))
    return redirect(url_for('get_recipes'))

此外,刚刚发现一个由@davidism通知的重复项: Converting Flask form data to JSON only gets first value