From 9faf2d5a2e312c7659ac12eb386238cbda7f1526 Mon Sep 17 00:00:00 2001 From: DevilsAutumn Date: Tue, 3 Dec 2024 01:56:02 +0530 Subject: [PATCH] get media folder by slug --- .../api/serializers/media_library.py | 15 +++++------- .../djangoindia/api/views/media_library.py | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/backend/djangoindia/api/serializers/media_library.py b/backend/djangoindia/api/serializers/media_library.py index fb807d68..edd0e997 100644 --- a/backend/djangoindia/api/serializers/media_library.py +++ b/backend/djangoindia/api/serializers/media_library.py @@ -1,6 +1,8 @@ from cabinet.models import File, Folder from rest_framework import serializers +from django.utils.text import slugify + class FileSerializer(serializers.ModelSerializer): class Meta: @@ -10,24 +12,19 @@ class Meta: class FolderLiteSerializer(serializers.ModelSerializer): children = serializers.SerializerMethodField() - type = serializers.SerializerMethodField() + slug = serializers.SerializerMethodField() class Meta: model = Folder - fields = ["id", "name", "children", "type"] + fields = ["id", "name", "children", "slug"] def get_children(self, obj): return FolderLiteSerializer( obj.children.all(), many=True, context=self.context ).data - def get_type(self, obj): - if len(obj.children.all()) > 0: - return "root" - elif len(obj.children.all()) >= 0 and obj.parent is None: - return "root" - else: - return "children" + def get_slug(self, obj): + return slugify(obj.name) def to_representation(self, instance): representation = super().to_representation(instance) diff --git a/backend/djangoindia/api/views/media_library.py b/backend/djangoindia/api/views/media_library.py index ab361455..b82befe5 100644 --- a/backend/djangoindia/api/views/media_library.py +++ b/backend/djangoindia/api/views/media_library.py @@ -3,11 +3,13 @@ from rest_framework.response import Response from django.core.exceptions import ValidationError +from django.http import Http404 from djangoindia.api.serializers.media_library import ( FolderLiteSerializer, FolderSerializer, ) +from djangoindia.db.models import Event class MediaLibraryAPIView(viewsets.GenericViewSet): @@ -23,6 +25,28 @@ def get_serializer_class(self): else: return FolderLiteSerializer + def get_object(self): + queryset = self.filter_queryset(self.get_queryset()) + lookup_value = self.kwargs.get(self.lookup_field) + + if lookup_value: + try: + # Try to get the event by slug + event = Event.objects.filter(slug=lookup_value).values("name").first() + + if event: + # If event exists, try to get the corresponding object + return queryset.get(name=event.get("name", "")) + + # If no event found with the given slug + raise Event.DoesNotExist("No event found with this slug") + + except (Event.DoesNotExist, Folder.DoesNotExist): + # Handle cases where either Event or Folder is not found + raise Http404("No matching event or folder found") + + raise ValidationError("No identifier provided") + def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs)