【发布时间】:2016-03-03 11:57:24
【问题描述】:
c.ingredients我正在创建一个用于学习目的的 Flask 示例应用程序,并且我有一个名为 CocktailForm 的表单,其中包含一个 SelectMultipleField。此表单应用于创建新的鸡尾酒对象以及更新它们:
class CocktailForm(Form):
name = StringField('What is the coktail\'s name?', validators=[Required()])
ingredients = SelectMultipleField('Ingredients',
coerce=int,
)
submit = SubmitField('Submit')
为了进行编辑,我想使用鸡尾酒数据加载相同的表单。它适用于名称和加载所有选项,但我还想选择那些作为鸡尾酒成分的选项:
@main.route('/edit/<int:id>', methods=['GET', 'POST'])
def edit(id):
try:
c = Cocktail.query.filter(Cocktail.id == id).one()
form = CocktailForm()
form.ingredients.choices = [(i.id, i.name) for i in Ingredient.query.all()]
if form.validate_on_submit():
c.name = form.name.data
cocktail_ingredients = Ingredient.query.filter(Ingredient.id.in_(form.ingredients.data)).all()
c.ingredients.extend(cocktail_ingredients)
db.session.commit()
else:
form.name.data = c.name
form.ingredients.default = [(i.id, i.name) for i in c.ingredients]
return render_template('new.html', form=form)
except Exception, e:
print e
return redirect(url_for('.index'))
我得到了意想不到的结果,因为在 HTML 上没有显示这些选项,但是当我提交表单时,即使您选择了新选项,这些选项似乎也总是被选中。
模板很简单:
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Cocktails{% endblock %}
{% block page_content %}
<div class="page-header">
<h1>New Cocktail</h1>
{{ wtf.quick_form(form) }}
</div>
{% endblock %}
这是您可以在浏览器中看到的内容。我正在编辑由杜松子酒和滋补品组成的 Gintonic 鸡尾酒。但是它们不会显示为选中状态:
提前感谢,任何提示将不胜感激
【问题讨论】: