diff --git a/apps/hadis/docs.py b/apps/hadis/docs.py index e9e05f2..05e5b4b 100644 --- a/apps/hadis/docs.py +++ b/apps/hadis/docs.py @@ -1068,7 +1068,12 @@ transmitter_sync_swagger = swagger_auto_schema( "id": 2, "scholar_name": "test sc2h", "opinion_text": "some2 opinions", - "status": "confirmed", + "status": { + "id": 1, + "title": "accepted", + "slug": "accepted", + "color": "green" + }, "created_at": "2025-12-16T11:38:19.646613", "updated_at": "2025-12-16T11:38:19.646613" }, @@ -1076,7 +1081,12 @@ transmitter_sync_swagger = swagger_auto_schema( "id": 1, "scholar_name": "test sch", "opinion_text": "some opinions", - "status": "confirmed", + "status": { + "id": 1, + "title": "accepted", + "slug": "accepted", + "color": "green" + }, "created_at": "2025-12-16T11:38:02.679871", "updated_at": "2025-12-16T11:38:02.679871" } @@ -1187,21 +1197,36 @@ transmitter_opinion_swagger = swagger_auto_schema( "transmitter": 56, "scholar_name": "Ibn Hajar al-Asqalani", "opinion_text": "He was a reliable and trustworthy narrator. His narrations are accepted and he is considered among the reliable transmitters of hadith. He had good memory and was known for his accuracy in transmission.", - "status": "confirmed", + "status": { + "id": 1, + "title": "accepted", + "slug": "accepted", + "color": "green" + } }, { "id": 2, "transmitter": 56, "scholar_name": "Imam al-Dhahabi", "opinion_text": "A reliable narrator with good character. His narrations are generally accepted, though some scholars have noted minor issues in certain chains of transmission.", - "status": "mixed", + "status": { + "id": 1, + "title": "accepted", + "slug": "accepted", + "color": "green" + } }, { "id": 3, "transmitter": 56, "scholar_name": "Ibn Ma'in", "opinion_text": "Trustworthy and reliable. His narrations are sound and he is considered among the reliable transmitters.", - "status": "confirmed", + "status": { + "id": 1, + "title": "accepted", + "slug": "accepted", + "color": "green" + } } ] } diff --git a/apps/hadis/serializers/hadis.py b/apps/hadis/serializers/hadis.py index 9c5fec3..dab495f 100644 --- a/apps/hadis/serializers/hadis.py +++ b/apps/hadis/serializers/hadis.py @@ -293,11 +293,24 @@ class TransmitterOpinionSerializer(serializers.ModelSerializer): """ Serializer for TransmitterOpinions """ scholar_name = LocalizedField() opinion_text = LocalizedField() + status = serializers.SerializerMethodField() class Meta: model = TransmitterOpinion fields = ['id','transmitter','scholar_name','opinion_text','status'] + def get_status(self, obj): + """Serialize the opinion status foreign key""" + if obj.status: + request = self.context.get('request') + return { + 'id': obj.status.id, + 'title': get_localized_text(obj.status.title, request), + 'slug': obj.status.slug, + 'color': obj.status.color + } + return None + class TransmitterOriginalTextSerializer(serializers.ModelSerializer): """ Serializer for TransmitterOriginalText """ title = LocalizedField() @@ -355,7 +368,7 @@ class TransmitterSyncSerializer(serializers.ModelSerializer): class Meta: model = Transmitters fields = [ - 'id', 'full_name', 'biographical', 'scholars_opinions', 'original_texts' + 'id', 'full_name','slug' ,'biographical', 'scholars_opinions', 'original_texts' ] def get_biographical(self, obj): @@ -399,7 +412,12 @@ class TransmitterSyncSerializer(serializers.ModelSerializer): 'id': opinion.id, 'scholar_name': get_localized_text(opinion.scholar_name, request), 'opinion_text': get_localized_text(opinion.opinion_text, request), - 'status': opinion.status, + 'status': { + 'id': opinion.status.id, + 'title': get_localized_text(opinion.status.title, request), + 'slug': opinion.status.slug, + 'color': opinion.status.color + } if opinion.status else None, 'created_at': opinion.created_at.isoformat() if opinion.created_at else None, 'updated_at': opinion.updated_at.isoformat() if opinion.updated_at else None, } diff --git a/apps/hadis/views/transmitter.py b/apps/hadis/views/transmitter.py index dc6bdbd..1572137 100644 --- a/apps/hadis/views/transmitter.py +++ b/apps/hadis/views/transmitter.py @@ -1,4 +1,5 @@ from django.contrib.admin.utils import lookup_field +from django.db.models import Prefetch from rest_framework.generics import ListAPIView , RetrieveAPIView from rest_framework.response import Response @@ -62,7 +63,8 @@ class TransmitterOpinionView(ListAPIView): return TransmitterOpinion.objects.filter( transmitter__slug=narrator_slug ).select_related( - 'transmitter' # Essential if serializer includes transmitter data + 'transmitter', # Essential if serializer includes transmitter data + 'status' # Added for the new OpinionStatus ForeignKey ).prefetch_related( # Add any nested relations from TransmitterOriginalTextSerializer # 'translations', @@ -111,8 +113,8 @@ class TransmitterSyncView(ListAPIView): return ( Transmitters.objects .prefetch_related( - 'opinions', # Already prefetched - 'originaltexts' # Already prefetched + Prefetch('opinions', queryset=TransmitterOpinion.objects.select_related('status')), + Prefetch('originaltexts', queryset=TransmitterOriginalText.objects.all()) ) .order_by('id') )