Skip to content
WTForms integration for peewee
Branch: master
Clone or download
Latest commit f062c59 Aug 23, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
example 2.0.0 compat in example app Oct 9, 2012
.travis.yml Travis update Aug 23, 2018
LICENSE Initial commit of wtforms integration for peewee Sep 1, 2011 Added tests to Apr 8, 2013 Adding a test suite Sep 1, 2011 Peewee version requirements. Jan 29, 2018


this project, based on the code found in wtforms.ext, provides a bridge between peewee models and wtforms, mapping model fields to form fields.

example usage:

first, create a couple basic models and then use the model_form class factory to create a form for the Entry model:

from peewee import *
from wtfpeewee.orm import model_form
import wtforms

class PasswordField(TextField):
    """ Custom-defined field example. """
    def wtf_field(self, model, **kwargs):
        return wtforms.PasswordField(**kwargs)

class Blog(Model):
    name = CharField()

    def __unicode__(self):

class Entry(Model):
    blog = ForeignKeyField(Blog)
    title = CharField()
    body = TextField()
    protected = PasswordField()

    def __unicode__(self):
        return self.title

# create a form class for use with the Entry model
EntryForm = model_form(Entry)

Example implementation for an "edit" view using Flask:

@app.route('/entries/<int:entry_id>/', methods=['GET', 'POST'])
def edit_entry(entry_id):
        entry = Entry.get(id=entry_id)
    except Entry.DoesNotExist:

    if request.method == 'POST':
        form = EntryForm(request.form, obj=entry)
        if form.validate():
            flash('Your entry has been saved')
        form = EntryForm(obj=entry)

    return render_template('blog/entry_edit.html', form=form, entry=entry)

Example template for above view:

{% extends "layout.html" %}
{% block body %}
  <h2>Edit {{ entry.title }}</h2>

  <form method="post" action="">
    {% for field in form %}
      <p>{{ field.label }} {{ field }}</p>
    {% endfor %}
    <p><button type="submit">Submit</button></p>
{% endblock %}
You can’t perform that action at this time.