|
|
|
@ -159,82 +159,49 @@ class HadisListSerializer(serializers.ModelSerializer): |
|
|
|
translation = LocalizedField() |
|
|
|
title = LocalizedField() |
|
|
|
title_narrator = LocalizedField() |
|
|
|
title_narrator = LocalizedField() |
|
|
|
|
|
|
|
class Meta: |
|
|
|
model = Hadis |
|
|
|
fields = ['id', 'number', 'slug', 'title','title_narrator', 'text' , |
|
|
|
'translation','category','status','share_link'] |
|
|
|
fields = ['id', 'number', 'slug', 'title', 'title_narrator', 'text', |
|
|
|
'translation', 'category', 'status', 'share_link'] |
|
|
|
|
|
|
|
def get_category(self, obj): |
|
|
|
"""Get category id and title""" |
|
|
|
if obj.category: |
|
|
|
request = self.context.get('request') |
|
|
|
lang = request.query_params.get('lang', 'ru') if request else 'ru' |
|
|
|
out = None |
|
|
|
for i in obj.category.title: |
|
|
|
if i['language_code']== lang: |
|
|
|
out = i['text'] |
|
|
|
if not out : |
|
|
|
out = '' |
|
|
|
return { |
|
|
|
'id': obj.category.id, |
|
|
|
'title': out, |
|
|
|
'slug':obj.category.slug, |
|
|
|
'source_type':obj.category.source_type, |
|
|
|
'sect_type':obj.category.sect.sect_type |
|
|
|
} |
|
|
|
return None |
|
|
|
if not obj.category: |
|
|
|
return None |
|
|
|
|
|
|
|
request = self.context.get('request') |
|
|
|
|
|
|
|
# Use your helper method |
|
|
|
title = get_localized_text(obj.category.title, request) or "" |
|
|
|
|
|
|
|
# Safe access for sect_type to prevent crashes if sect is missing |
|
|
|
# Note: Ensure your view uses .select_related('category__sect') for speed! |
|
|
|
sect_type = obj.category.sect.sect_type if obj.category.sect else None |
|
|
|
|
|
|
|
return { |
|
|
|
'id': obj.category.id, |
|
|
|
'title': title, |
|
|
|
'slug': obj.category.slug, |
|
|
|
'source_type': obj.category.source_type, |
|
|
|
'sect_type': sect_type |
|
|
|
} |
|
|
|
|
|
|
|
def get_status(self, obj): |
|
|
|
"""Get status id and title""" |
|
|
|
if obj.hadis_status: |
|
|
|
request = self.context.get('request') |
|
|
|
language_code = getattr(request, "LANGUAGE_CODE", None) if request else None |
|
|
|
if not language_code: |
|
|
|
from django.utils.translation import get_language |
|
|
|
language_code = get_language() or 'en' |
|
|
|
|
|
|
|
title = None |
|
|
|
if obj.hadis_status.title and isinstance(obj.hadis_status.title, list): |
|
|
|
# 1) Exact match |
|
|
|
for item in obj.hadis_status.title: |
|
|
|
if isinstance(item, dict) and item.get("language_code") == language_code: |
|
|
|
title = item.get("text") |
|
|
|
break |
|
|
|
|
|
|
|
# 2) Fallback to English |
|
|
|
if not title: |
|
|
|
for item in obj.hadis_status.title: |
|
|
|
if isinstance(item, dict) and item.get("language_code") == "en": |
|
|
|
title = item.get("text") |
|
|
|
break |
|
|
|
|
|
|
|
# 3) First available |
|
|
|
if not title and obj.hadis_status.title and isinstance(obj.hadis_status.title[0], dict): |
|
|
|
title = obj.hadis_status.title[0].get("text") |
|
|
|
if not obj.hadis_status: |
|
|
|
return None |
|
|
|
|
|
|
|
return { |
|
|
|
'id': obj.hadis_status.id, |
|
|
|
'title': title, |
|
|
|
'color': obj.hadis_status.color |
|
|
|
} |
|
|
|
return None |
|
|
|
|
|
|
|
# def get_translation(self, obj): |
|
|
|
# """Get translation based on request language""" |
|
|
|
# request = self.context.get('request') |
|
|
|
# language_code = getattr(request, 'LANGUAGE_CODE', 'en') |
|
|
|
# return obj.translation.get(language_code) |
|
|
|
|
|
|
|
# def get_title(self,obj): |
|
|
|
# # ✅ Get language from request |
|
|
|
request = self.context.get('request') |
|
|
|
lang = request.query_params.get('lang', 'ru') if request else 'ru' |
|
|
|
|
|
|
|
# # ✅ CALL THE MODEL METHOD! |
|
|
|
# return obj.get_title(lang) |
|
|
|
|
|
|
|
# Use your helper method |
|
|
|
title = get_localized_text(obj.hadis_status.title, request) |
|
|
|
|
|
|
|
return { |
|
|
|
'id': obj.hadis_status.id, |
|
|
|
'title': title, |
|
|
|
'color': obj.hadis_status.color |
|
|
|
} |
|
|
|
|
|
|
|
class HadisStatusSerializer(serializers.ModelSerializer): |
|
|
|
"""Serializer for HadisStatus""" |
|
|
|
|