Django's FormPreview updated to use class based views.
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:
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 get_initial, security_hash, and failed_hash used to take an HttpRequest as an argument but no longer do for the same reason stated above. A few other changes to note:
Please let me know if I’ve missed anything.
The 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 release.
Starting in version 1.3, Django has a “blessed” version of class based views. This package contains an updated version of FormPreview 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 done. Django’s FormPreview only passed cleaned_data and I didn’t want to reconstruct the form as recleaning it would unnecessarily hit the database.
I previously filed a ticket on Django’s trac to include the original backwards compatibile version of 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.