diff --git a/TODO.txt b/TODO.txt index 542d245..c65ba58 100644 --- a/TODO.txt +++ b/TODO.txt @@ -5,7 +5,7 @@ - Download Veranstaltungsliste - ApproachForm aufteilen - Teilnehmerzahl und Trainerzahl kombinieren -- Zurück-Button in Formulare +- Besserer Zurück-Button in Formulare - Save as Draft - Edit Event - Copy Event diff --git a/dav_events/forms/generic.py b/dav_events/forms/generic.py index caf5d2d..ca7440f 100644 --- a/dav_events/forms/generic.py +++ b/dav_events/forms/generic.py @@ -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() diff --git a/dav_events/templates/dav_events/event_create/SummaryForm.html b/dav_events/templates/dav_events/event_create/SummaryForm.html index 89e3b65..9cc0501 100644 --- a/dav_events/templates/dav_events/event_create/SummaryForm.html +++ b/dav_events/templates/dav_events/event_create/SummaryForm.html @@ -8,6 +8,7 @@ {% block form-buttons %} {% buttons %} -{% trans 'Abbrechen' %} +{% trans 'Zurück' %} +{% trans 'Abbrechen' %} {% endbuttons %} {% endblock form-buttons %} diff --git a/dav_events/templates/dav_events/event_create/base.html b/dav_events/templates/dav_events/event_create/base.html index 93178a8..77c5b07 100644 --- a/dav_events/templates/dav_events/event_create/base.html +++ b/dav_events/templates/dav_events/event_create/base.html @@ -10,7 +10,7 @@ {% bootstrap_form_errors form %} {% endblock form-errors %} {% block form %} -
+ {% block form-content %} {% csrf_token %} {% block form-fields %} @@ -28,7 +28,8 @@ {% block form-buttons %} {% buttons %} - {% trans 'Abbrechen' %} + {% trans 'Zurück' %} + {% trans 'Abbrechen' %} {% endbuttons %} {% endblock form-buttons %} {% endblock form-content %} diff --git a/dav_events/views/events.py b/dav_events/views/events.py index 62c7d00..a5c89f8 100644 --- a/dav_events/views/events.py +++ b/dav_events/views/events.py @@ -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) \ No newline at end of file