2013-08-23 45 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