Skip to content
Browse files

Fixed #16393 -- FormWizard's cookie storage backend now works with al…

…l versions of simplejson and the standard library json module.

git-svn-id: bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
1 parent 2bc77be commit 358e5a8031be14efe33dc62e821408c2a6a8e85a @alex alex committed
Showing with 15 additions and 2 deletions.
  1. +15 −2 django/contrib/formtools/wizard/storage/
17 django/contrib/formtools/wizard/storage/
@@ -1,9 +1,11 @@
from django.core.files.uploadedfile import UploadedFile
-from django.utils.functional import lazy_property
+from django.utils.datastructures import MultiValueDict
from django.utils.encoding import smart_str
+from django.utils.functional import lazy_property
from import NoFileStorageConfigured
class BaseStorage(object):
step_key = 'step'
step_data_key = 'step_data'
@@ -43,9 +45,20 @@ def _set_extra_data(self, extra_data):
extra_data = lazy_property(_get_extra_data, _set_extra_data)
def get_step_data(self, step):
- return[self.step_data_key].get(step, None)
+ # When reading the serialized data, upconvert it to a MultiValueDict,
+ # some serializers (json) don't preserve the type of the object.
+ values =[self.step_data_key].get(step, None)
+ if values is not None:
+ values = MultiValueDict(values)
+ return values
def set_step_data(self, step, cleaned_data):
+ # If the value is a MultiValueDict, convert it to a regular dict of the
+ # underlying contents. Some serializers call the public API on it (as
+ # opposed to the underlying dict methods), in which case the content
+ # can be truncated (__getitem__ returns only the first item).
+ if isinstance(cleaned_data, MultiValueDict):
+ cleaned_data = dict(cleaned_data.lists())[self.step_data_key][step] = cleaned_data

0 comments on commit 358e5a8

Please sign in to comment.
Something went wrong with that request. Please try again.