我已经阅读了我能找到的所有教程和一些文档,但找不到我的问题。我已尽可能简单地使用“公司”作为示例。当我加载我的/company/edit/2 url 时,表单不会填充值。
查看
@app.route('/company/edit/<id>')
def company_edit(id):
company = {'id': 2, 'company_name': 'SomeCo'} #dummy object
form = CompanyForm(obj=company)
#form = CompanyForm(None, company) #tried this too, based on API
return render_template('company_form.html', form = form)
表单对象
class CompanyForm(Form):
company_name = TextField('company_name', validators = [Required()])
表单模板
<!-- extend base layout -->
{% extends "base.html" %}
{% block content %}
<form action="" method="post" name="login">
{{form.hidden_tag()}}
<p>
Company Name:<br>
{{form.company_name(size=80)}}<br>
</p>
<p><input type="submit" value="Sign In"></p>
</form>
{% endblock %}
我的理解是这应该可行——路由/company/edit/x 将调用 company_edit(x),它声明虚拟公司对象(稍后从数据库中提取),实例化一个表单,传递公司对象,然后呈现传递表单的模板。表单模板应该能够将公司对象中的字段名称与表单对象中相应的输入名称相匹配,并使用值“SomeCo”填充文本字段。我是否遗漏了一些明显的东西?
谢谢!
最佳答案
传递给 WTForms 实例的 obj
关键字需要有属性,而不是键(换句话说,它需要响应 __getattr__
而不是 __getitem__
)。如果您想将类似字典的对象传递到您的 Form
中,您需要使用 splat 运算符 (**
) 将您的字典作为关键字参数传递:
form = CompanyForm(**company)
关于python - Flask-WTForms - 简单的 CRUD 示例 - 值不填充表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16755984/