1

私は次のモデルを持っています:

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'))

および次のビュー:

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})>
4

2 に答える 2

5

フォームを開始する必要があります。

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 にあります。

于 2013-08-23T15:10:57.973 に答える