I will write better documentation shortly, but for now see Django's documentation on its version of this class.
This project is just a fork Django's FormPreview class. There are a few basic differences when using django-cbv-formpreview's version of the class:
- Specify the form you wish to use by setting
form_classon your subclass. This is instead of constructing a
FormPreviewwith the form class (i.e. don't do
- Include it in your URLconf just as you would a normal class-based
- You still need to override the
donemethod, but it only takes a cleaned
formas an argument. Django's version takes an
HttpRequestobject and the form's
cleaned_data. Like all class-based views, the current
HttpRequestis available as an instance attribute (i.e.
process_previewmethod is still there, but it takes a
contextit will pass to the template. It is no longer passed an
HttpRequestobject for the same reason as above.
Along with the above backwards incompatibile changes that affect
publicly documented behavior, a comment in the source code
suggested a few methods that might be useful to override. The methods
failed_hash used to take
HttpRequest as an argument but no longer do for the same
reason stated above. A few other changes to note:
process_paramshas been removed. The
kwargspassed to the view are available as instance attributes with the same names. If you need to do something with them before the view is processed, override
dispatchand be sure to return a call to the parents
return super(MyFormPreview, self).dispatch(request, *args, **kwargs).
get_auto_idhas also been removed. Override
get_form_kwargsif you need it.
Please let me know if I've missed anything.
FormPreview class from the
contrib.formtools app is a
class based view that's been in Django for over 5 years. Originally
written by Adrian Holovaty, it hasn't changed significantly since its
Starting in version 1.3, Django has a "blessed" version of class based
views. This package contains an updated version of
that inherits from the new
FormView class. This enables a
consistent API for class based views in Django. Of particular
use are the methods provided by the
FormMixin class, from which
FormView inherits. For example, the
get_form method gives you
control over the instantiation of the form class. This allows you to
construct an instance with non-standard arguments which was the
original motivation of the patch.
I originally strove for backwards compatibility but after using this
in production, decided it wasn't worth it. The final straw was when
I needed to call the
save method on a form in
FormPreview only passed
cleaned_data and I didn't want to
reconstruct the form as recleaning it would unnecessarily hit the
I previously filed a ticket
on Django's trac to include the original backwards compatibile version
django-cbv-formpreview in Django 1.4. Now that I've broken
backwards compatibility, I'm not sure how the core devs will respond
to it. I personally feel that few people actually use this
functionality and would therefore have minimal impact on the community.