Released October 10th, 2009.
- Fields have much greater control over input processing. Filters have been
added to implement a simple way to transform input data.
- Added fields that encapsulate advanced data structures such as dynamic lists
or child forms for more powerful field composing.
- Fields now use widgets for rendering.
- All built-in validators have been converted to classes to clean up the code.
- `Form.auto_populate` and `Field.populate` were renamed to `populate_obj` to
clarify that they populate another object, not the Form or Field. This is an
API breaking change.
- Dropped support for Python 2.3.
Released January 24th, 2009.
- Several fixes were made to the code and tests to make WTForms compatible
with Python 2.3/2.4.
- Form's properties can now be accessed via dictionary-style access such as
`form['author']`. This also has the intended effect of making variable
lookups in Django templates more reliable.
- Form and Field construction changes: Form now uses a metaclass to handle
creating its `_unbound_fields` property, and Field construction now gives an
instance of the new `UnboundField` class instead of using a partial function
application. These are both internal changes and do not change the API.
Released January 18th, 2009.
- Validation overhaul: Fields are now responsible for their own validation,
instead of mostly relying on Form. There are also new pre_validate and
post_validate hooks on subfields, adding a great deal of flexibility when
dealing with field-level validation. Note that this is an API breaking change
if you have any subfields that override `Field.validate`. These will need to
be updated to use the new hooks.
- Changes in how `process_data` and `process_formdata` are called:
* `process_data` no longer accepts the `has_formdata` parameter.
* At form instantiation time, `process_data` will be called only once for
each field. If a model object is provided which contains the property,
then this value is used. Otherwise, a keyword argument if specified is
used. Failing that, the field's default value is used.
* If any form data is sent, `process_formdata` will be called after
`process_data` for each field. If no form data is available for the
given field, it is called with an empty list.
- wtforms.ext.django has been overhauled, both to mirror features and changes
of the Django 1.0 release, and to add some useful fields for working with
django ORM data in forms.
- The `checker` keyword argument to SelectField, SelectMultipleField, and
RadioField has been renamed to `coerce` to reflect the actual functionality
of this callable.
Released January 13th, 2009.
- We have documentation and unit tests!
- Fields now have a `flags` property which contain boolean flags that are set
either by the field itself or validators being specified on a field. The
flags can then be used in checks in template or python code.
- Changed the way fields take parameters, they are no longer quasi magic. This
is a breaking change. Please see the documentation for the new syntax.
- Added optional description argument to Field, accessible on the field as
`description`. This provides an easy way to define e.g. help text in the same
place as the form.
- Added new semantics for validators which can stop the validation chain, with
or without errors.
- Added a regexp validator, and removed the not_empty validator in favour of
two validators, optional and required. The new validators allow control
over the validation chain in addition to checking emptiness.
- Renamed wtforms.contrib to wtforms.ext and reorganised wtforms.ext.django.
This is a breaking change if you were using the django extensions, but should
only require changing your imports around a little.
- Better support for other frameworks such as Pylons.
Released July 25th, 2008.
- Initial release.