Added primitive Back button to EventCreate.

This commit is contained in:
2018-01-23 23:08:08 +01:00
parent 221024393e
commit 013ac34c43
5 changed files with 30 additions and 8 deletions

View File

@@ -17,6 +17,11 @@ class ChainedForm(forms.Form):
self._request = kwargs.pop('request', None)
self._load_session_data()
if 'initial' not in kwargs:
kwargs['initial'] = self._session_data
else:
kwargs['initial'].update(self._session_data)
super(ChainedForm, self).__init__(*args, **kwargs)
self._proceed_session_data(self._session_data)
@@ -34,6 +39,9 @@ class ChainedForm(forms.Form):
for k in session_data:
self._session_data[k] = self._deserialize_value(session_data[k])
def _proceed_session_data(self, session_data):
pass
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)
@@ -42,9 +50,6 @@ class ChainedForm(forms.Form):
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.'
@@ -99,7 +104,7 @@ class ChainedForm(forms.Form):
def save(self):
object_kwargs = dict()
data = self._session_data
data = self._session_data.copy()
if 'deadline' in data:
buf = data['deadline']
if isinstance(buf, basestring):
@@ -114,3 +119,10 @@ class ChainedForm(forms.Form):
object_kwargs[field] = data[field]
return self._get_object(object_kwargs)
def flush_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)
if session_var_name in self._request.session:
del self._request.session[session_var_name]
self._session_data = dict()

View File

@@ -8,6 +8,7 @@
{% block form-buttons %}
{% buttons %}
<button type="submit" class="btn btn-success">{% trans 'Einsenden' %}</button>
<a class="btn btn-danger" href="{{ abort_url }}">{% trans 'Abbrechen' %}</a>
<a class="btn btn-warning" href="?back">{% trans 'Zurück' %}</a>
<a class="btn btn-danger" href="?abort">{% trans 'Abbrechen' %}</a>
{% endbuttons %}
{% endblock form-buttons %}

View File

@@ -10,7 +10,7 @@
{% bootstrap_form_errors form %}
{% endblock form-errors %}
{% block form %}
<form action="" method="post">
<form action="?next" method="post">
{% block form-content %}
{% csrf_token %}
{% block form-fields %}
@@ -28,7 +28,8 @@
{% block form-buttons %}
{% buttons %}
<button type="submit" class="btn btn-success">{% trans 'Weiter' %}</button>
<a class="btn btn-danger" href="{{ abort_url }}">{% trans 'Abbrechen' %}</a>
<a class="btn btn-warning" href="?back">{% trans 'Zurück' %}</a>
<a class="btn btn-danger" href="?abort">{% trans 'Abbrechen' %}</a>
{% endbuttons %}
{% endblock form-buttons %}
{% endblock form-content %}

View File

@@ -162,6 +162,7 @@ class EventCreateView(generic.FormView):
return self.render_to_response(self.get_context_data(form=next_form, event=event))
else:
event.save()
form.flush_session_data()
messages.success(self.request, _(u'Veranstaltung angelegt.'))
owner = event.owner
self.clean_session_data()
@@ -185,4 +186,11 @@ class EventCreateView(generic.FormView):
def get(self, request, *args, **kwargs):
self.clean_session_data(request.session)
if 'abort' in request.GET:
form = self.get_form()
form.flush_session_data()
return HttpResponseRedirect(self.abort_url)
return super(EventCreateView, self).get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return super(EventCreateView, self).post(request, *args, **kwargs)