From 0f2f8dba3639e6d758eca29ed11911040ff284a3 Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Tue, 25 Jan 2022 16:49:42 -0400 Subject: [PATCH] Implement get show by slug --- program/views.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/program/views.py b/program/views.py index a6101bc5..4877b3e9 100644 --- a/program/views.py +++ b/program/views.py @@ -142,6 +142,18 @@ def int_or_none(key, kwargs): return int(kwargs[key]) if key in kwargs else None +def pk_and_slug(kwargs): + pk = None + slug = None + + try: + pk = int(kwargs['pk']) + except ValueError: + slug = kwargs['pk'] + + return pk, slug + + class APIUserViewSet(viewsets.ModelViewSet): """ /users returns oneself. Superusers see all users. Only superusers may create a user (GET, POST) @@ -231,7 +243,7 @@ class APIShowViewSet(viewsets.ModelViewSet): /shows/?category={category_pk} returns shows of a given category (GET) /shows/?topic={topic_pk} returns shows of a given topic (GET) /shows/?musicfocus={musicfocus_pk} returns shows of a given music focus (GET) - /shows/{pk} retrieves or updates (if owned) a single show (GET, PUT). + /shows/{pk|slug} retrieves or updates (if owned) a single show (GET, PUT). Only superusers may add and delete shows """ @@ -324,9 +336,10 @@ class APIShowViewSet(viewsets.ModelViewSet): def retrieve(self, request, *args, **kwargs): """Returns a single show""" - pk = int_or_none('pk', self.kwargs) + pk, slug = pk_and_slug(self.kwargs) + + show = get_object_or_404(Show, pk=pk) if pk else get_object_or_404(Show, slug=slug) if slug else None - show = get_object_or_404(Show, pk=pk) serializer = ShowSerializer(show) return Response(serializer.data) -- GitLab