Commit af7ea808 authored by Tim Graham's avatar Tim Graham
Browse files

Added WizardView.file_storage exception message and docs

Thanks Danilo Bargen for the patch.
parent d9213d09
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -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] = {}
+7 −5
Original line number Diff line number Diff line
@@ -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,
+25 −0
Original line number Diff line number Diff line
@@ -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
+2 −0
Original line number Diff line number Diff line
@@ -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
-------------------------------------