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