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

README.md

wtf-peewee

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):
        return self.name

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):
    try:
        entry = Entry.get(id=entry_id)
    except Entry.DoesNotExist:
        abort(404)

    if request.method == 'POST':
        form = EntryForm(request.form, obj=entry)
        if form.validate():
            form.populate_obj(entry)
            entry.save()
            flash('Your entry has been saved')
    else:
        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>
  </form>
{% endblock %}
You can’t perform that action at this time.