Browse Source

feat(hadis): enhance category corrections search and request localization

master
Mohsen Taba 2 weeks ago
parent
commit
68818d7c2f
  1. 19
      apps/hadis/serializers/category.py
  2. 10
      apps/hadis/views/hadis.py

19
apps/hadis/serializers/category.py

@ -96,11 +96,24 @@ class LocalizedField(serializers.Field):
if not isinstance(value, list): if not isinstance(value, list):
return _get_localized_item_value(value) 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") 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: 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 # 1) Exact match with request language
for item in value: for item in value:

10
apps/hadis/views/hadis.py

@ -205,7 +205,7 @@ class HadisListView(ListAPIView):
category_obj = get_object_or_404(HadisCategory, slug=category_slug) category_obj = get_object_or_404(HadisCategory, slug=category_slug)
# 3. Serialize this single category for the Hero section # 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 # 4. Check if it's a Quran Category and fetch verse data
quran_data = None quran_data = None
@ -702,8 +702,12 @@ class CategoryHadisCorrectionsView(ListAPIView):
search_query = self.request.query_params.get('search', None) search_query = self.request.query_params.get('search', None)
if search_query: if search_query:
search_conditions = ( search_conditions = (
Q(title__icontains=search_query) |
Q(text__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) queryset = queryset.filter(search_conditions)
@ -731,7 +735,7 @@ class CategoryHadisCorrectionsView(ListAPIView):
response = super().list(request, *args, **kwargs) response = super().list(request, *args, **kwargs)
category_slug = self.kwargs.get('category_slug') category_slug = self.kwargs.get('category_slug')
category_obj = HadisCategory.objects.filter(slug=category_slug).first() 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): if isinstance(response.data, dict):
ordered_data = { ordered_data = {

Loading…
Cancel
Save