diff --git a/apps/hadis/serializers/category.py b/apps/hadis/serializers/category.py index 5495f69..78a49f2 100644 --- a/apps/hadis/serializers/category.py +++ b/apps/hadis/serializers/category.py @@ -96,11 +96,24 @@ class LocalizedField(serializers.Field): if not isinstance(value, list): return _get_localized_item_value(value) - # Get language from request, then fall back to global language / 'fa' + # Get language from request, then fall back to global language / 'en' request = self.context.get("request") - language_code = getattr(request, "LANGUAGE_CODE", None) if request else None + language_code = None + if request: + query_params = getattr(request, "query_params", None) or getattr(request, "GET", None) + if query_params: + language_code = query_params.get("language_code") or query_params.get("lang") + if not language_code: + language_code = getattr(request, "LANGUAGE_CODE", None) + if not language_code and hasattr(request, "headers"): + language_code = request.headers.get("Accept-Language") + elif not language_code and hasattr(request, "META"): + language_code = request.META.get("HTTP_ACCEPT_LANGUAGE") + if language_code: + language_code = language_code.split(",")[0].split(";")[0].split("-")[0].strip().lower() + if not language_code: - language_code = get_language() or "fa" # global active language + language_code = get_language() or "en" # 1) Exact match with request language for item in value: diff --git a/apps/hadis/views/hadis.py b/apps/hadis/views/hadis.py index b2ecbdf..5cc067b 100644 --- a/apps/hadis/views/hadis.py +++ b/apps/hadis/views/hadis.py @@ -205,7 +205,7 @@ class HadisListView(ListAPIView): category_obj = get_object_or_404(HadisCategory, slug=category_slug) # 3. Serialize this single category for the Hero section - category_data = SimpleCategory(category_obj).data + category_data = SimpleCategory(category_obj, context={'request': request}).data # 4. Check if it's a Quran Category and fetch verse data quran_data = None @@ -702,8 +702,12 @@ class CategoryHadisCorrectionsView(ListAPIView): search_query = self.request.query_params.get('search', None) if search_query: search_conditions = ( + Q(title__icontains=search_query) | Q(text__icontains=search_query) | - Q(narrator__icontains=search_query) + Q(narrator__icontains=search_query) | + Q(translation__icontains=search_query) | + Q(hadis__title__icontains=search_query) | + Q(hadis__title_narrator__icontains=search_query) ) queryset = queryset.filter(search_conditions) @@ -731,7 +735,7 @@ class CategoryHadisCorrectionsView(ListAPIView): response = super().list(request, *args, **kwargs) category_slug = self.kwargs.get('category_slug') category_obj = HadisCategory.objects.filter(slug=category_slug).first() - category_data = SimpleCategory(category_obj).data if category_obj else None + category_data = SimpleCategory(category_obj, context={'request': request}).data if category_obj else None if isinstance(response.data, dict): ordered_data = {