Preparations for copy event feature.

This commit is contained in:
2018-03-13 11:49:41 +01:00
parent ccb7a00510
commit 9da5997447
4 changed files with 29 additions and 5 deletions

View File

@@ -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()

View File

@@ -60,14 +60,12 @@
{% block page-container-fluid %}
<div class="action-tabs">
<div class="pull-right">
<!--
<a class="btn btn-primary"
href="{% url 'dav_events:event_detail' event.pk %}"
href="{% url 'dav_events:event_copy' event.pk %}"
title="{% trans 'Diese Veranstaltung als Vorlage für eine neue Veranstaltung benutzen' %}">
{% bootstrap_icon 'duplicate' %}&thinsp;
{% trans 'Kopieren' %}
</a>
-->
{% if has_permission_accept %}
<a class="btn {% if event.get_status == 'submitted' %}btn-success{% else %}btn-default disabled{% endif %}"
data-toggle="modal" data-target="#modal-accept-dialog">

View File

@@ -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<pk>\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<pk>\d+)/copy', views.events.EventCopyView.as_view(), name='event_copy'),
url(r'^events/(?P<pk>\d+)/confirmpublication',
views.events.EventConfirmPublicationView.as_view(), name='event_confirmpublication'),
url(r'^events/(?P<pk>\d+)/accept', views.events.EventAcceptView.as_view(), name='event_accept'),
url(r'^events/(?P<pk>\d+)/edit', views.events.EventUpdateView.as_view(), name='event_update'),
url(r'^events/(?P<pk>\d+)/', views.events.EventDetailView.as_view(), name='event_detail'),
url(r'^action/(?P<pk>[a-fA-F0-9]{8}-([a-fA-F0-9]{4}-){3}[a-fA-F0-9]{12})/',

View File

@@ -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')