Browse Source

added category for hero

master
Mohsen Taba 5 months ago
parent
commit
b7f32ff8bf
  1. 7
      apps/hadis/serializers/category.py
  2. 60
      apps/hadis/views/category.py
  3. 32
      apps/hadis/views/hadis.py

7
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"""

60
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

32
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

Loading…
Cancel
Save