我需要捕获多个选择表单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
的值。
答案 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