docs/wtf_forms.md
# MongoEngine and WTForms
flask-mongoengine automatically generates WTForms from MongoEngine models:
```python
from flask_mongoengine.wtf import model_form
class User(db.Document):
email = db.StringField(required=True)
first_name = db.StringField(max_length=50)
last_name = db.StringField(max_length=50)
class Content(db.EmbeddedDocument):
text = db.StringField()
lang = db.StringField(max_length=3)
class Post(db.Document):
title = db.StringField(max_length=120, required=True, validators=[validators.InputRequired(message='Missing title.'),])
author = db.ReferenceField(User)
tags = db.ListField(db.StringField(max_length=30))
content = db.EmbeddedDocumentField(Content)
PostForm = model_form(Post)
def add_post(request):
form = PostForm(request.POST)
if request.method == 'POST' and form.validate():
# do something
redirect('done')
return render_template('add_post.html', form=form)
```
For each MongoEngine field, the most appropriate WTForm field is used.
Parameters allow the user to provide hints if the conversion is not implicit::
```python
PostForm = model_form(Post, field_args={'title': {'textarea': True}})
```
Supported parameters:
For fields with `choices`:
- `multiple` to use a SelectMultipleField
- `radio` to use a RadioField
For ``StringField``:
- `password` to use a PasswordField
- `textarea` to use a TextAreaField
For ``ListField``:
- `min_entries` to set the minimal number of entries
(By default, a StringField is converted into a TextAreaField if and only if it has no
max_length.)
## Supported fields
* StringField
* BinaryField
* URLField
* EmailField
* IntField
* FloatField
* DecimalField
* BooleanField
* DateTimeField
* **ListField** (using wtforms.fields.FieldList )
* SortedListField (duplicate ListField)
* **EmbeddedDocumentField** (using wtforms.fields.FormField and generating inline Form)
* **ReferenceField** (using wtforms.fields.SelectFieldBase with options loaded from
QuerySet or Document)
* DictField
## Not currently supported field types:
* ObjectIdField
* GeoLocationField
* GenericReferenceField