首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask-WTForms -简单的CRUD示例-值不填充表单

Flask-WTForms -简单的CRUD示例-值不填充表单
EN

Stack Overflow用户
提问于 2013-05-26 11:31:08
回答 1查看 3.4K关注 0票数 1

我已经阅读了我能找到的所有教程和文档,但找不到我的问题。我以"companies“为例,让它变得尽可能简单。当我加载我的/company/edit/2url时,表单没有填充值。

视图

代码语言:javascript
复制
@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)

表单对象

代码语言:javascript
复制
class CompanyForm(Form):
  company_name = TextField('company_name', validators = [Required()])

表单模板

代码语言:javascript
复制
<!-- 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 %}

我的理解是,这应该是可行的-路由/公司/编辑/x将调用company_edit(x),它声明虚拟公司对象(稍后从数据库中提取),实例化一个表单,传递公司对象,然后呈现传递该表单的模板。表单模板应该能够将公司对象中的字段名称与表单对象中相应的输入名称相匹配,并使用值"SomeCo“填充文本字段。我是不是漏掉了什么明显的东西?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-26 12:15:44

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

代码语言:javascript
复制
form = CompanyForm(**company)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16755984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档