BROKEN: started to improve session passing in chained form.
This commit is contained in:
@@ -80,13 +80,12 @@ class ChainedForm(forms.Form):
|
|||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self._session_data = dict()
|
self._session_data = dict()
|
||||||
if 'session_data' in kwargs:
|
self._request = kwargs.pop('request', None)
|
||||||
self.add_session_data(kwargs.pop('session_data'))
|
self._load_session_data()
|
||||||
super(ChainedForm, self).__init__(*args, **kwargs)
|
|
||||||
self._proceed_session_data(self._session_data)
|
|
||||||
|
|
||||||
def _proceed_session_data(self, session_data):
|
super(ChainedForm, self).__init__(*args, **kwargs)
|
||||||
pass
|
|
||||||
|
self._proceed_session_data(self._session_data)
|
||||||
|
|
||||||
def _serialize_value(self, value):
|
def _serialize_value(self, value):
|
||||||
return converters.Iso8601Serializer.serialize(value, ignore_unsupported_input=True)
|
return converters.Iso8601Serializer.serialize(value, ignore_unsupported_input=True)
|
||||||
@@ -94,6 +93,24 @@ class ChainedForm(forms.Form):
|
|||||||
def _deserialize_value(self, value):
|
def _deserialize_value(self, value):
|
||||||
return converters.Iso8601Serializer.deserialize(value, ignore_unsupported_input=True)
|
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):
|
def _get_model(self):
|
||||||
if not hasattr(self, '_model'):
|
if not hasattr(self, '_model'):
|
||||||
raise ImproperlyConfigured('{cls} is missing a Model.'
|
raise ImproperlyConfigured('{cls} is missing a Model.'
|
||||||
@@ -128,22 +145,15 @@ class ChainedForm(forms.Form):
|
|||||||
def get_next_form_name(cls):
|
def get_next_form_name(cls):
|
||||||
return cls._next_form_name
|
return cls._next_form_name
|
||||||
|
|
||||||
def get_session_data(self):
|
def clean(self):
|
||||||
data = dict()
|
cleaned_data = super(ChainedForm, self).clean()
|
||||||
for k in self._session_data:
|
self._session_data.update(cleaned_data)
|
||||||
data[k] = self._serialize_value(self._session_data[k])
|
self._save_session_data()
|
||||||
for k in self.cleaned_data:
|
return 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 save(self):
|
def save(self):
|
||||||
object_kwargs = dict()
|
object_kwargs = dict()
|
||||||
data = self._session_data
|
data = self._session_data
|
||||||
data.update(self.cleaned_data)
|
|
||||||
if 'deadline' in data:
|
if 'deadline' in data:
|
||||||
buf = data['deadline']
|
buf = data['deadline']
|
||||||
if isinstance(buf, basestring):
|
if isinstance(buf, basestring):
|
||||||
|
|||||||
@@ -164,21 +164,26 @@ class EventCreateView(generic.FormView):
|
|||||||
|
|
||||||
return form_class
|
return form_class
|
||||||
|
|
||||||
|
def get_form_kwargs(self):
|
||||||
|
kwargs = super(EventCreateView, self).get_form_kwargs()
|
||||||
|
if 'request' not in kwargs:
|
||||||
|
kwargs['request'] = self.request
|
||||||
|
return kwargs
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(EventCreateView, self).get_context_data(**kwargs)
|
context = super(EventCreateView, self).get_context_data(**kwargs)
|
||||||
context['abort_url'] = self.abort_url
|
context['abort_url'] = self.abort_url
|
||||||
return context
|
return context
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
form.add_session_data(self.request.session.get('dav_events_event_create_previous_data', dict()))
|
|
||||||
event = form.save()
|
event = form.save()
|
||||||
|
|
||||||
next_form_name = form.next_form_name
|
next_form_name = form.next_form_name
|
||||||
if next_form_name:
|
if next_form_name:
|
||||||
self.request.session['dav_events_event_create_previous_data'] = form.get_session_data()
|
|
||||||
self.request.session['dav_events_event_create_next_form_name'] = next_form_name
|
self.request.session['dav_events_event_create_next_form_name'] = next_form_name
|
||||||
next_form_class = self.get_form_class(next_form_name)
|
next_form_class = self.get_form_class(next_form_name)
|
||||||
next_form = next_form_class(session_data=form.get_session_data())
|
# XXX get_form() passes data into form
|
||||||
|
next_form = self.get_form(form_class=next_form_class)
|
||||||
return self.render_to_response(self.get_context_data(form=next_form, event=event))
|
return self.render_to_response(self.get_context_data(form=next_form, event=event))
|
||||||
else:
|
else:
|
||||||
event.save()
|
event.save()
|
||||||
@@ -198,8 +203,6 @@ class EventCreateView(generic.FormView):
|
|||||||
session = self.request.session
|
session = self.request.session
|
||||||
if 'dav_events_event_create_next_form_name' in session:
|
if 'dav_events_event_create_next_form_name' in session:
|
||||||
del session['dav_events_event_create_next_form_name']
|
del session['dav_events_event_create_next_form_name']
|
||||||
if 'dav_events_event_create_previous_data' in session:
|
|
||||||
del session['dav_events_event_create_previous_data']
|
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
self.clean_session_data(request.session)
|
self.clean_session_data(request.session)
|
||||||
|
|||||||
Reference in New Issue
Block a user