Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

WTForms integration for peewee

branch: master

This branch is 0 commits ahead and 0 commits behind master

Fetching latest commit…

Cannot retrieve the latest commit at this time


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

class Blog(Model):
    name = CharField()

    def __unicode__(self):

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

    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 %}
Something went wrong with that request. Please try again.