From b7f32ff8bfa00af457073eaed4922d7abac9833f Mon Sep 17 00:00:00 2001 From: mohsentaba Date: Sun, 4 Jan 2026 08:56:08 +0330 Subject: [PATCH] added category for hero --- apps/hadis/serializers/category.py | 7 +++- apps/hadis/views/category.py | 60 +++++++++++++++++++++++++++++- apps/hadis/views/hadis.py | 32 +++++++++++++++- 3 files changed, 95 insertions(+), 4 deletions(-) diff --git a/apps/hadis/serializers/category.py b/apps/hadis/serializers/category.py index 7d67a76..9613522 100644 --- a/apps/hadis/serializers/category.py +++ b/apps/hadis/serializers/category.py @@ -70,7 +70,12 @@ class LocalizedField(serializers.Field): first = value[0] return first.get("text") if isinstance(first, dict) else None - +class SimpleCategory(serializers.ModelSerializer): + title = LocalizedField() + description = LocalizedField() + class Meta: + model = HadisCategory + fields = ['id', 'title','description'] class HadisCategorySectListSerializer(serializers.ModelSerializer): """Serializer for HadisSect list with grouped response""" diff --git a/apps/hadis/views/category.py b/apps/hadis/views/category.py index e249f69..6ff4acc 100644 --- a/apps/hadis/views/category.py +++ b/apps/hadis/views/category.py @@ -11,7 +11,8 @@ from ..serializers import ( CategorySerializer , HadisCategorySelectSerializer , HadisCategorySelectSourceSerializer, - get_localized_text + get_localized_text, + SimpleCategory ) from ..docs import ( hadis_sect_list_swagger, @@ -212,6 +213,34 @@ class HadisCategorySelectBySectView(ListAPIView): @categories_tree_by_sect_swagger def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs) + + def list(self, request, *args, **kwargs): + # 1. Run the standard list logic (get pagination, filter, results) + response = super().list(request, *args, **kwargs) + + # 2. Find the "Parent" Category based on the URL slug + category_slug = self.kwargs.get('slug') + category_obj = get_object_or_404(HadisCategory, slug=category_slug) + + # 3. Serialize this single category for the Hero section + # You might need a simple serializer just for titles/descriptions + category_data = SimpleCategory(category_obj).data + + # 4. Inject it into the response data + # Note: We access response.data because we are using DRF's Response object + if isinstance(response.data, dict): + # Reorder the response to place current_category before results + ordered_data = {} + for key in ['count', 'next', 'previous']: + if key in response.data: + ordered_data[key] = response.data[key] + ordered_data['current_category'] = category_data + if 'results' in response.data: + ordered_data['results'] = response.data['results'] + response.data = ordered_data + + return response + def get_queryset(self): sect_type = self.kwargs.get('sect_type') @@ -248,6 +277,34 @@ class HadisCategorySelectBySectSourceView(ListAPIView): @categories_tree_by_sect_source_swagger def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs) + + def list(self, request, *args, **kwargs): + # 1. Run the standard list logic (get pagination, filter, results) + response = super().list(request, *args, **kwargs) + + # 2. Find the "Parent" Category based on the URL slug + category_slug = self.kwargs.get('slug') + category_obj = get_object_or_404(HadisCategory, slug=category_slug) + + # 3. Serialize this single category for the Hero section + # You might need a simple serializer just for titles/descriptions + category_data = SimpleCategory(category_obj).data + + # 4. Inject it into the response data + # Note: We access response.data because we are using DRF's Response object + if isinstance(response.data, dict): + # Reorder the response to place current_category before results + ordered_data = {} + for key in ['count', 'next', 'previous']: + if key in response.data: + ordered_data[key] = response.data[key] + ordered_data['current_category'] = category_data + if 'results' in response.data: + ordered_data['results'] = response.data['results'] + response.data = ordered_data + + return response + def get_queryset(self): sect_type = self.kwargs.get('sect_type') @@ -300,6 +357,7 @@ class CategoriesBySectView(ListAPIView): def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs) + from rest_framework.decorators import api_view, permission_classes, authentication_classes from rest_framework.permissions import AllowAny from rest_framework.response import Response diff --git a/apps/hadis/views/hadis.py b/apps/hadis/views/hadis.py index 7e18447..bfa7558 100644 --- a/apps/hadis/views/hadis.py +++ b/apps/hadis/views/hadis.py @@ -6,9 +6,8 @@ from rest_framework.response import Response from django.db.models import Count from django.db.models import Prefetch from ..serializers.category import get_localized_text - from ..models import HadisCategory, Hadis, HadisCollection,HadisTransmitter , HadisCorrection ,HadisReference, HadisStatus ,ReferenceImage -from ..serializers import HadisListSerializer, HadisBasicSerializer, HadisDetailSerializer, HadisCollectionListSerializer, HadisSyncSerializer,HadisCorrectionSerializer,HadisTransmitterListSerializer +from ..serializers import HadisListSerializer, HadisBasicSerializer, HadisDetailSerializer, HadisCollectionListSerializer, HadisSyncSerializer,HadisCorrectionSerializer,HadisTransmitterListSerializer , SimpleCategory from ..docs import arguments_filters_swagger ,hadis_list_swagger, hadis_detail_swagger, hadis_collections_swagger, hadis_sync_swagger, hadis_transmitters_swagger, hadis_corrections_swagger, hadis_basic_swagger, hadis_main_list_swagger @@ -93,6 +92,33 @@ class HadisListView(ListAPIView): @hadis_list_swagger def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs) + + def list(self, request, *args, **kwargs): + # 1. Run the standard list logic (get pagination, filter, results) + response = super().list(request, *args, **kwargs) + + # 2. Find the "Parent" Category based on the URL slug + category_slug = self.kwargs.get('category_slug') + category_obj = get_object_or_404(HadisCategory, slug=category_slug) + + # 3. Serialize this single category for the Hero section + # You might need a simple serializer just for titles/descriptions + category_data = SimpleCategory(category_obj).data + + # 4. Inject it into the response data + # Note: We access response.data because we are using DRF's Response object + if isinstance(response.data, dict): + # Reorder the response to place current_category before results + ordered_data = {} + for key in ['count', 'next', 'previous']: + if key in response.data: + ordered_data[key] = response.data[key] + ordered_data['current_category'] = category_data + if 'results' in response.data: + ordered_data['results'] = response.data['results'] + response.data = ordered_data + + return response def get_queryset(self): category_slug = self.kwargs.get('category_slug') @@ -110,6 +136,8 @@ class HadisListView(ListAPIView): ).select_related('category') + + class HadisMainListView(ListAPIView): """ API view to list Hadis by category_id