BROKEN: started to improve session passing in chained form.

This commit is contained in:
2018-01-19 17:16:15 +01:00
parent 3f9cc11dbd
commit 022f3f5d61
2 changed files with 36 additions and 23 deletions

View File

@@ -80,13 +80,12 @@ class ChainedForm(forms.Form):
def __init__(self, *args, **kwargs):
self._session_data = dict()
if 'session_data' in kwargs:
self.add_session_data(kwargs.pop('session_data'))
super(ChainedForm, self).__init__(*args, **kwargs)
self._proceed_session_data(self._session_data)
self._request = kwargs.pop('request', None)
self._load_session_data()
def _proceed_session_data(self, session_data):
pass
super(ChainedForm, self).__init__(*args, **kwargs)
self._proceed_session_data(self._session_data)
def _serialize_value(self, value):
return converters.Iso8601Serializer.serialize(value, ignore_unsupported_input=True)
@@ -94,6 +93,24 @@ class ChainedForm(forms.Form):
def _deserialize_value(self, value):
return converters.Iso8601Serializer.deserialize(value, ignore_unsupported_input=True)
def _load_session_data(self):
if self._request is not None and hasattr(self._request, 'session'):
session_var_name = '{}_chained_form_session_data'.format(self._request.resolver_match.url_name)
session_data = self._request.session.get(session_var_name, dict())
for k in session_data:
self._session_data[k] = self._deserialize_value(session_data[k])
def _save_session_data(self):
if self._request is not None and hasattr(self._request, 'session'):
session_var_name = '{}_chained_form_session_data'.format(self._request.resolver_match.url_name)
session_data = dict()
for k in self._session_data:
session_data[k] = self._serialize_value(self._session_data[k])
self._request.session[session_var_name] = session_data
def _proceed_session_data(self, session_data):
pass
def _get_model(self):
if not hasattr(self, '_model'):
raise ImproperlyConfigured('{cls} is missing a Model.'
@@ -128,22 +145,15 @@ class ChainedForm(forms.Form):
def get_next_form_name(cls):
return cls._next_form_name
def get_session_data(self):
data = dict()
for k in self._session_data:
data[k] = self._serialize_value(self._session_data[k])
for k in self.cleaned_data:
data[k] = self._serialize_value(self.cleaned_data[k])
return data
def add_session_data(self, data):
for k in data:
self._session_data[k] = self._deserialize_value(data[k])
def clean(self):
cleaned_data = super(ChainedForm, self).clean()
self._session_data.update(cleaned_data)
self._save_session_data()
return cleaned_data
def save(self):
object_kwargs = dict()
data = self._session_data
data.update(self.cleaned_data)
if 'deadline' in data:
buf = data['deadline']
if isinstance(buf, basestring):