Added WizardView.file_storage exception message and docs

Thanks Danilo Bargen for the patch.
This commit is contained in:
Tim Graham 2012-11-01 16:11:05 -04:00
parent d9213d09db
commit af7ea808d8
4 changed files with 40 additions and 7 deletions

View File

@ -69,7 +69,9 @@ class BaseStorage(object):
wizard_files = self.data[self.step_files_key].get(step, {})
if wizard_files and not self.file_storage:
raise NoFileStorageConfigured
raise NoFileStorageConfigured(
"You need to define 'file_storage' in your "
"wizard view in order to handle file uploads.")
files = {}
for field, field_dict in six.iteritems(wizard_files):
@ -81,7 +83,9 @@ class BaseStorage(object):
def set_step_files(self, step, files):
if files and not self.file_storage:
raise NoFileStorageConfigured
raise NoFileStorageConfigured(
"You need to define 'file_storage' in your "
"wizard view in order to handle file uploads.")
if step not in self.data[self.step_files_key]:
self.data[self.step_files_key][step] = {}

View File

@ -174,7 +174,9 @@ class WizardView(TemplateView):
for field in six.itervalues(form.base_fields):
if (isinstance(field, forms.FileField) and
not hasattr(cls, 'file_storage')):
raise NoFileStorageConfigured
raise NoFileStorageConfigured(
"You need to define 'file_storage' in your "
"wizard view in order to handle file uploads.")
# build the kwargs for the wizardview instances
kwargs['form_list'] = init_form_list
@ -436,8 +438,8 @@ class WizardView(TemplateView):
def get_all_cleaned_data(self):
"""
Returns a merged dictionary of all step cleaned_data dictionaries.
If a step contains a `FormSet`, the key will be prefixed with formset
and contain a list of the formset cleaned_data dictionaries.
If a step contains a `FormSet`, the key will be prefixed with
'formset-' and contain a list of the formset cleaned_data dictionaries.
"""
cleaned_data = {}
for form_key in self.get_form_list():
@ -458,8 +460,8 @@ class WizardView(TemplateView):
def get_cleaned_data_for_step(self, step):
"""
Returns the cleaned data for a given `step`. Before returning the
cleaned data, the stored values are being revalidated through the
form. If the data doesn't validate, None will be returned.
cleaned data, the stored values are revalidated through the form.
If the data doesn't validate, None will be returned.
"""
if step in self.form_list:
form_obj = self.get_form(step=step,

View File

@ -493,6 +493,21 @@ Advanced ``WizardView`` methods
context = self.get_context_data(form=form, **kwargs)
return self.render_to_response(context)
.. method:: WizardView.get_cleaned_data_for_step(step)
This method returns the cleaned data for a given ``step``. Before returning
the cleaned data, the stored values are revalidated through the form. If
the data doesn't validate, ``None`` will be returned.
.. method:: WizardView.get_all_cleaned_data()
This method returns a merged dictionary of all form steps' ``cleaned_data``
dictionaries. If a step contains a ``FormSet``, the key will be prefixed
with ``formset-`` and contain a list of the formset's ``cleaned_data``
dictionaries. Note that if two or more steps have a field with the same
name, the value for that field from the latest step will overwrite the
value from any earlier steps.
Providing initial data for the forms
====================================
@ -534,6 +549,16 @@ This storage will temporarily store the uploaded files for the wizard. The
:attr:`file_storage` attribute should be a
:class:`~django.core.files.storage.Storage` subclass.
Django provides a built-in storage class (see :ref:`the built-in filesystem
storage class <builtin-fs-storage>`)::
from django.conf import settings
from django.core.files.storage import FileSystemStorage
class CustomWizardView(WizardView):
...
file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'photos'))
.. warning::
Please remember to take care of removing old files as the

View File

@ -139,6 +139,8 @@ useful -- you can use the global default storage system::
See :doc:`/ref/files/storage` for the file storage API.
.. _builtin-fs-storage:
The built-in filesystem storage class
-------------------------------------