【问题标题】:Flask-WTForms - Simple CRUD Example - Value Not Populating FormFlask-WTForms - 简单的 CRUD 示例 - 值未填充表单
【发布时间】:2013-05-21 07:05:26
【问题描述】:

我已经阅读了我能找到的所有教程和文档,但找不到我的问题。我以“公司”为例,尽可能简单地做到了这一点。当我加载我的 /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”填充文本字段。我错过了什么明显的东西吗?

谢谢!

【问题讨论】:

    标签: python flask flask-wtforms


    【解决方案1】:

    传递给 WTForms 实例的 obj 关键字需要具有属性,而不是键(换句话说,它需要响应 __getattr__ 而不是 __getitem__)。如果您想将类似字典的对象传递给您的 Form,您需要使用 splat 运算符 (**) 将您的字典作为关键字参数传递:

    form = CompanyForm(**company)
    

    【讨论】:

    • 我知道这很简单。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 2020-01-18
    • 2021-01-30
    相关资源
    最近更新 更多