2013-08-23 58 views
1

我有以下型號:瓶,MongoEngine,WTForms - 在表格渲染錯誤

class Post(Document): 
    body = db.StringField(required=True) 
    author = db.StringField(verbose_name="Author", max_length=255, required=True) 
    created_at = db.DateTimeField(default=datetime.datetime.now, required=True) 
    comments = db.ListField(db.EmbeddedDocumentField('Comment')) 

和follwing觀點:

from flask.ext.mongoengine.wtf import model_form 

@app.route('/') 
def home(): 
    form = model_form(Post, exclude=('created_at', 'comments')) 
    return render_template('home.html', form=form) 

我不知道如何使這種形式的模板。我曾嘗試幾件事情:

{% for field in form %} 
    {{ field }} 
{% endfor %} 

這提供了以下錯誤:

TypeError: 'FormMeta' object is not iterable 

我也試過這樣:

{{ form.body() }} 

隨着不同的錯誤:

AttributeError: 'UnboundField' object has no attribute '__call__' 

和{{form.body}}呈現這樣的

<UnboundField(TextAreaField,(), {'default': None, 'validators': [<wtforms.validators.Required object at 0x7f63804d0fd0>], 'description': '', 'filters': [], 'label': None})> 
+0

不'{{場()}}'拋出一個錯誤?此外,在此聲明之前,此代碼的其他版本的wtf/flask/mongoengine – Ross

+0

失敗{%for form%} {%endfor%}做同樣的事情 – un1t

+0

Flask == 0.10.1 pymongo == 2.6 mongoengine == 0.8.4 WTForms == 1.0.4 Flask-WTF == 0.9.1 flask-mongoengine == 0.7.0 – un1t

回答

4

您需要啓動形式:

from flask.ext.mongoengine.wtf import model_form 

@app.route('/') 
def home(): 
    form = model_form(Post, exclude=('created_at', 'comments'))(request.form) 
    return render_template('home.html', form=form) 

使用同一個堆棧的例子項目可以發現:https://github.com/rozza/flask-tumblelog

+1

謝謝,這個作品! – un1t

+1

感謝這工作。你知道爲什麼它會自動將db.StringField轉換爲TextArea輸入嗎? – Bitmap

+0

@Bitmap我覺得這很奇怪 –

0

表單不可迭代。它在錯誤中提到。

我沒有使用model_form,但我認爲{{ form.field_name }}應該工作。

希望它有幫助。

+0

根據文檔(http://wtforms.simplecodes.com/docs/1.0.4/forms .html)和我見過的所有例子都是可以忍受的。 {{form.body}}像這樣呈現「]'description':'', 'filters':[],'label':None})>「 – un1t