From fc69aafc0e25b3efc172d332ce4429acf7305e5f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?=
 <benjamin.haettasch@cs.tu-darmstadt.de>
Date: Sat, 19 Oct 2019 02:29:02 +0200
Subject: [PATCH] Improve event slug handling

---
 AKModel/views.py      | 20 ++++++++++++++------
 AKSubmission/views.py |  4 ++--
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/AKModel/views.py b/AKModel/views.py
index 55d76b42..84864063 100644
--- a/AKModel/views.py
+++ b/AKModel/views.py
@@ -3,24 +3,32 @@ from django.http import Http404
 from AKModel.models import Event
 
 
-class FilterByEventSlugMixin:
+class EventSlugMixin:
     """
-    Mixin to filter different querysets based on a event slug from the request url
+    Mixin to handle views with event slugs
     """
     event = None
 
-    def get_queryset(self):
+    def get(self, request, *args, **kwargs):
         # Find event based on event slug
         try:
             self.event = Event.get_by_slug(self.kwargs.get("event_slug", None))
         except Event.DoesNotExist:
             raise Http404
-
-        # Filter current queryset based on url event slug or return 404 if event slug is invalid
-        return super().get_queryset().filter(event=self.event)
+        return super().get(request, *args, **kwargs)
 
     def get_context_data(self, *, object_list=None, **kwargs):
         context = super().get_context_data(object_list=object_list, **kwargs)
         # Add event to context (to make it accessible in templates)
         context["event"] = self.event
         return context
+
+
+class FilterByEventSlugMixin(EventSlugMixin):
+    """
+    Mixin to filter different querysets based on a event slug from the request url
+    """
+
+    def get_queryset(self):
+        # Filter current queryset based on url event slug or return 404 if event slug is invalid
+        return super().get_queryset().filter(event=self.event)
diff --git a/AKSubmission/views.py b/AKSubmission/views.py
index c9109fb6..e7aea578 100644
--- a/AKSubmission/views.py
+++ b/AKSubmission/views.py
@@ -5,7 +5,7 @@ from django.utils.translation import gettext_lazy as _
 from django.views.generic import ListView, DetailView, CreateView
 
 from AKModel.models import AK, AKCategory, AKTag, Event
-from AKModel.views import FilterByEventSlugMixin
+from AKModel.views import FilterByEventSlugMixin, EventSlugMixin
 from AKSubmission.forms import AKForm
 
 
@@ -62,7 +62,7 @@ class AKListByTagView(AKListView):
         return super().get_queryset().filter(tags=self.tag)
 
 
-class AKSubmissionView(CreateView):
+class AKSubmissionView(EventSlugMixin, CreateView):
     model = AK
     template_name = 'AKSubmission/submit_new.html'
     form_class = AKForm
-- 
GitLab