2013-05-26 60 views
1

我已經閱讀了所有可找到的教程和一些文檔,但無法找到我的問題。我儘可能簡單地使用「公司」作爲示例。當我加載我的/ company/edit/2 url時,表單不會填充該值。Flask-WTForms - 簡單的CRUD示例 - 未填充的值

視圖

@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 %} 

我的理解是,這應該工作 - 路由/公司/編輯/ X會叫company_edit( x),它聲明虛擬公司對象(稍後將從數據庫中提取),實例化一個表單,傳遞公司對象,然後呈現通過表單的模板。表單模板應該能夠將公司對象中的字段名稱與表單對象中的相應輸入名稱進行匹配,並使用值「SomeCo」填充文本字段。我錯過了明顯的東西嗎?

謝謝!

回答

6

傳遞給WTForms實例的obj關鍵字需要屬性,而非鍵(換句話說,它需要響應__getattr__而不是__getitem__)。如果你想通過一個類似於字典的對象插入到Form您需要使用圖示符(**)來傳遞你的字典中的關鍵字參數:

form = CompanyForm(**company) 
+0

我知道這是簡單的東西。謝謝! – David