@ -12,7 +12,8 @@ from apps.bookmark.serializers.bookmark import BookmarkStatusSerializer
from ..models import (
from ..models import (
Hadis , HadisStatus , HadisTag , HadisTransmitter ,
Hadis , HadisStatus , HadisTag , HadisTransmitter ,
HadisReference , ReferenceImage , Transmitters , HadisCollection ,
HadisReference , ReferenceImage , Transmitters , HadisCollection ,
TransmitterOpinion , TransmitterOriginalText , BookReference , BookReferenceImage , BookAuthor , HadisCorrection
TransmitterOpinion , TransmitterOriginalText , BookReference , BookReferenceImage , BookAuthor , HadisCorrection , HadisInterpretation ,
CorrectionReferenceImage , InterpretationReferenceImage , OriginalTextReferenceImage , CorrectionReference , InterpretationReference , OriginalTextReference
)
)
@ -960,3 +961,134 @@ class NarratorRelationSerializer(serializers.ModelSerializer):
' color ' : obj . reliability . color ,
' color ' : obj . reliability . color ,
' main_color_code ' : obj . reliability . main_color_code ,
' main_color_code ' : obj . reliability . main_color_code ,
}
}
# --- سریالایزرهای کمکی تصاویر رفرنس ---
class CorrectionReferenceImageSerializer ( serializers . ModelSerializer ) :
class Meta :
model = CorrectionReferenceImage
fields = [ ' id ' , ' image ' , ' priority ' ]
class InterpretationReferenceImageSerializer ( serializers . ModelSerializer ) :
class Meta :
model = InterpretationReferenceImage
fields = [ ' id ' , ' image ' , ' priority ' ]
class OriginalTextReferenceImageSerializer ( serializers . ModelSerializer ) :
class Meta :
model = OriginalTextReferenceImage
fields = [ ' id ' , ' image ' , ' priority ' ]
# --- سریالایزرهای جامع رفرنسها (شامل اطلاعات کتاب، ادیشن و ولوم) ---
class BaseDetailedReferenceSerializer ( serializers . ModelSerializer ) :
book_title = serializers . SerializerMethodField ( )
book_authors = serializers . SerializerMethodField ( )
edition_info = serializers . SerializerMethodField ( )
volume_info = serializers . SerializerMethodField ( )
def get_book_title ( self , obj ) :
if obj . book_reference :
return get_localized_text ( obj . book_reference . title , self . context . get ( ' request ' ) )
return None
def get_book_authors ( self , obj ) :
if obj . book_reference :
request = self . context . get ( ' request ' )
return [
{ " id " : author . id , " name " : get_localized_text ( author . name , request ) }
for author in obj . book_reference . authors . all ( )
]
return [ ]
def get_edition_info ( self , obj ) :
if obj . edition :
return {
" id " : obj . edition . id ,
" edition_number " : obj . edition . edition_number ,
" publisher " : obj . edition . publisher
}
return None
def get_volume_info ( self , obj ) :
if obj . book_volume :
return {
" id " : obj . book_volume . id ,
" title " : obj . book_volume . title
}
return None
class DetailedCorrectionReferenceSerializer ( BaseDetailedReferenceSerializer ) :
images = CorrectionReferenceImageSerializer ( many = True , read_only = True )
class Meta :
model = CorrectionReference
fields = [ ' id ' , ' book_title ' , ' book_authors ' , ' edition_info ' , ' volume_info ' , ' hadith_number ' , ' volume ' , ' pages ' , ' address ' , ' url ' , ' images ' ]
class DetailedInterpretationReferenceSerializer ( BaseDetailedReferenceSerializer ) :
images = InterpretationReferenceImageSerializer ( many = True , read_only = True )
class Meta :
model = InterpretationReference
fields = [ ' id ' , ' book_title ' , ' book_authors ' , ' edition_info ' , ' volume_info ' , ' hadith_number ' , ' volume ' , ' pages ' , ' address ' , ' url ' , ' images ' ]
class DetailedOriginalTextReferenceSerializer ( BaseDetailedReferenceSerializer ) :
images = OriginalTextReferenceImageSerializer ( many = True , read_only = True )
class Meta :
model = OriginalTextReference
fields = [ ' id ' , ' book_title ' , ' book_authors ' , ' edition_info ' , ' volume_info ' , ' volume ' , ' pages ' , ' address ' , ' url ' , ' images ' ]
# --- سریالایزرهای اصلی جزئیات (Detail Serializers) ---
class HadisCorrectionDetailSerializer ( serializers . ModelSerializer ) :
title = LocalizedField ( )
description = serializers . SerializerMethodField ( )
translation = LocalizedField ( )
references = DetailedCorrectionReferenceSerializer ( many = True , read_only = True )
hadis_info = serializers . SerializerMethodField ( )
class Meta :
model = HadisCorrection
fields = [ ' id ' , ' title ' , ' slug ' , ' description ' , ' translation ' , ' share_link ' , ' hadis_info ' , ' references ' ]
def get_description ( self , obj ) :
return get_localized_correction_text ( obj . text , request = self . context . get ( ' request ' ) )
def get_hadis_info ( self , obj ) :
return { " id " : obj . hadis . id , " number " : obj . hadis . number , " slug " : obj . hadis . slug }
class HadisInterpretationDetailSerializer ( serializers . ModelSerializer ) :
title = LocalizedField ( )
translation = LocalizedField ( )
references = DetailedInterpretationReferenceSerializer ( many = True , read_only = True )
category_info = serializers . SerializerMethodField ( )
class Meta :
model = HadisInterpretation
fields = [ ' id ' , ' title ' , ' text ' , ' translation ' , ' priority ' , ' category_info ' , ' references ' ]
def get_category_info ( self , obj ) :
return {
" id " : obj . category . id ,
" slug " : obj . category . slug ,
" title " : get_localized_text ( obj . category . title , self . context . get ( ' request ' ) )
}
class TransmitterOriginalTextDetailSerializer ( serializers . ModelSerializer ) :
title = LocalizedField ( )
text = LocalizedField ( )
translation = LocalizedField ( )
references = DetailedOriginalTextReferenceSerializer ( many = True , read_only = True )
transmitter_info = serializers . SerializerMethodField ( )
class Meta :
model = TransmitterOriginalText
fields = [ ' id ' , ' slug ' , ' title ' , ' text ' , ' translation ' , ' share_link ' , ' transmitter_info ' , ' references ' ]
def get_transmitter_info ( self , obj ) :
return {
" id " : obj . transmitter . id ,
" slug " : obj . transmitter . slug ,
" name " : get_localized_text ( obj . transmitter . full_name , self . context . get ( ' request ' ) )
}