【发布时间】:2014-09-08 21:07:20
【问题描述】:
我对烧瓶、烧瓶-wtforms 和烧瓶-sqlalchemy 有一个奇怪的问题。
我有以下表格:
class CompEditForm(Form):
name = StringField('Company name', validators = [Required()])
desc = TextAreaField('Description')
address = StringField('Adress', validators = [Required()])
...
sectors = SelectMultipleField(u'Sectors', coerce=int)
submit = SubmitField(u'Save changes')
当我编写用于编辑公司的烧瓶视图时:
def edit_company(id):
comp = Company.query.get_or_404(id)
form = CompEditForm(request.form,comp)
上面的代码在表单中预先填充了名称、描述等所有字段。由于公司可以在不同的部门开展业务,因此我使用多对多关系对其进行建模。我尝试使用以下内容填充表单的 SelectMultipleFiled:
form.sectors.choices = [(g.id, g.name_srb) for g in Sector.query.order_by('name')]
到目前为止一切都很好,表格中填充了扇区并且效果很好。这与创建新公司的表格相同。当我希望使用现有扇区预先填充编辑表单时,就会出现问题:
form.sectors.data = [c.id for c in comp.sectors.all()]
它使用正确的扇区填充表单,即它们在呈现时被选中,但是当我提交表单时,它们只是不会更改并匹配用户的输入。它们保持不变:
if form.validate_on_submit():
print form.sectors.data # stays the same, not taking account of the user's new choice
有什么想法吗?我尝试使用默认参数而不是数据,但它没有预先填充任何扇区。
【问题讨论】:
标签: flask flask-sqlalchemy flask-wtforms