From 9da5997447cb3973efddde8691c715b32540dc9f Mon Sep 17 00:00:00 2001 From: heinzel Date: Tue, 13 Mar 2018 11:49:41 +0100 Subject: [PATCH] Preparations for copy event feature. --- dav_events/forms/generic.py | 12 ++++++++++++ dav_events/templates/dav_events/event_detail.html | 4 +--- dav_events/urls.py | 5 +++-- dav_events/views/events.py | 13 +++++++++++++ 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/dav_events/forms/generic.py b/dav_events/forms/generic.py index 9f8303e..6de15a8 100644 --- a/dav_events/forms/generic.py +++ b/dav_events/forms/generic.py @@ -130,3 +130,15 @@ class ModelMixin(object): if hasattr(model, attr): kwargs2[attr] = kwargs1[attr] return model(**kwargs2) + + def load_from_instance(self, instance): + model = self._get_model() + if not isinstance(instance, model): + raise TypeError('Expected %s' % model.__class__.__name__) + self.is_bound = True + self.data = {} + self.cleaned_data = {} + for field in instance._meta.get_fields(): + self.data[field.name] = getattr(instance, field.name) + self.cleaned_data[field.name] = getattr(instance, field.name) + self._post_clean() \ No newline at end of file diff --git a/dav_events/templates/dav_events/event_detail.html b/dav_events/templates/dav_events/event_detail.html index 3ca485f..0e2db91 100644 --- a/dav_events/templates/dav_events/event_detail.html +++ b/dav_events/templates/dav_events/event_detail.html @@ -60,14 +60,12 @@ {% block page-container-fluid %}
- {% if has_permission_accept %} diff --git a/dav_events/urls.py b/dav_events/urls.py index 7813f74..0dd15d3 100644 --- a/dav_events/urls.py +++ b/dav_events/urls.py @@ -9,11 +9,12 @@ urlpatterns = [ url(r'^user/password$', views.auth.SetPasswordView.as_view(), name='set_password'), url(r'^user/password/reset$', views.auth.ResetPasswordView.as_view(), name='reset_password'), url(r'^events$', views.events.EventListView.as_view(), name='event_list'), - url(r'^events/create$', views.events.EventCreateView.as_view(), name='event_create'), url(r'^events/export$', views.events.EventListExportView.as_view(), name='event_list_export'), - url(r'^events/(?P\d+)/accept', views.events.EventAcceptView.as_view(), name='event_accept'), + url(r'^events/create$', views.events.EventCreateView.as_view(), name='event_create'), + url(r'^events/(?P\d+)/copy', views.events.EventCopyView.as_view(), name='event_copy'), url(r'^events/(?P\d+)/confirmpublication', views.events.EventConfirmPublicationView.as_view(), name='event_confirmpublication'), + url(r'^events/(?P\d+)/accept', views.events.EventAcceptView.as_view(), name='event_accept'), url(r'^events/(?P\d+)/edit', views.events.EventUpdateView.as_view(), name='event_update'), url(r'^events/(?P\d+)/', views.events.EventDetailView.as_view(), name='event_detail'), url(r'^action/(?P[a-fA-F0-9]{8}-([a-fA-F0-9]{4}-){3}[a-fA-F0-9]{12})/', diff --git a/dav_events/views/events.py b/dav_events/views/events.py index 68827ea..dcb7c31 100644 --- a/dav_events/views/events.py +++ b/dav_events/views/events.py @@ -220,6 +220,19 @@ class EventUpdateView(EventPermissionMixin, generic.UpdateView): return super(EventUpdateView, self).dispatch(request, *args, **kwargs) +class EventCopyView(EventDetailView): + permission = 'view' + form_class = forms.events.EventCreateForm + + def get(self, request, *args, **kwargs): + event = self.get_object() + initial_form_name = self.form_class.get_initial_form_name() + form_class = getattr(forms.events, initial_form_name) + form = form_class(request=self.request) + form.load_from_instance(event) + return HttpResponseRedirect(reverse('dav_events:event_create')) + + class EventCreateView(generic.FormView): form_class = forms.events.EventCreateForm template_dir = os.path.join('dav_events', 'event_create')