From ee1e9d830ef6922fe47df7008a8f841f209b0be1 Mon Sep 17 00:00:00 2001 From: "H.shokhmgar86" Date: Wed, 9 Sep 2026 13:31:40 +0330 Subject: [PATCH 1/2] feat: implement dynamic localization fields and category serializers for Hadis models --- apps/hadis/serializers/category.py | 4 ++-- apps/hadis/serializers/hadis.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/hadis/serializers/category.py b/apps/hadis/serializers/category.py index 78a49f2..d845b6a 100644 --- a/apps/hadis/serializers/category.py +++ b/apps/hadis/serializers/category.py @@ -8,14 +8,14 @@ from django.utils.translation import get_language def _get_localized_item_value(item): """ - Prefer `title`, but fall back to `text` or `name` for older/mis-shaped localized entries. + Prefer `title`, but fall back to `text`, `name`, or `description` for localized entries. """ if not item: return None if isinstance(item, str): return item if isinstance(item, dict): - return item.get("title") or item.get("text") or item.get("name") + return item.get("title") or item.get("text") or item.get("name") or item.get("description") return str(item) def get_localized_text(json_list, request=None, fallback_lang="en", language_code=None): diff --git a/apps/hadis/serializers/hadis.py b/apps/hadis/serializers/hadis.py index 9185ac8..28327a2 100644 --- a/apps/hadis/serializers/hadis.py +++ b/apps/hadis/serializers/hadis.py @@ -1288,6 +1288,7 @@ class HadisShortSerializer(serializers.ModelSerializer): class HadisDetailSerializer(serializers.ModelSerializer): """Detailed serializer for Hadis with core information (transmitters and corrections moved to separate endpoints)""" hadis_status = HadisStatusSerializer(read_only=True) + status_text = LocalizedField(source='hadis_status_text') tags = HadisTagSerializer(many=True, read_only=True) references = HadisReferenceSerializer( many=True, @@ -1296,13 +1297,12 @@ class HadisDetailSerializer(serializers.ModelSerializer): reference_images = SerializerMethodField() address = LocalizedField() category_slug = serializers.CharField(source='category.slug', read_only=True) - # address_details = serializers.SerializerMethodField() class Meta: model = Hadis fields = [ - 'id', 'number', 'slug', 'category_id', 'category_slug', 'hadis_status','links','share_link', - 'tags','references','reference_images','address' + 'id', 'number', 'slug', 'category_id', 'category_slug', 'hadis_status', 'status_text', 'links', 'share_link', + 'tags', 'references', 'reference_images', 'address' ] # def get_address_details(self, obj): From 2c6e8ad8cc6559357a04e075a6ccc41cd1bba578 Mon Sep 17 00:00:00 2001 From: "H.shokhmgar86" Date: Wed, 9 Sep 2026 13:55:25 +0330 Subject: [PATCH 2/2] feat: implement Hadis list, collection, and sync views with optimized prefetching --- apps/hadis/views/hadis.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/hadis/views/hadis.py b/apps/hadis/views/hadis.py index 9510fbb..6041896 100644 --- a/apps/hadis/views/hadis.py +++ b/apps/hadis/views/hadis.py @@ -128,9 +128,16 @@ class HadisSyncView(ListAPIView): pagination_class = NoPagination def get_queryset(self): + qs = Hadis.objects.filter(status=True) + category_id = self.request.query_params.get('category_id') + category_slug = self.request.query_params.get('category_slug') + if category_id: + qs = qs.filter(category_id=category_id) + elif category_slug: + qs = qs.filter(category__slug=category_slug) + return ( - Hadis.objects - .filter(status=True) + qs .select_related('category', 'hadis_status') .prefetch_related( 'tags',