Browse Source

update model and serializers with OpinionStatus

master
Mohsen Taba 5 months ago
parent
commit
ea85dd69d8
  1. 35
      apps/hadis/docs.py
  2. 22
      apps/hadis/serializers/hadis.py
  3. 8
      apps/hadis/views/transmitter.py

35
apps/hadis/docs.py

@ -1068,7 +1068,12 @@ transmitter_sync_swagger = swagger_auto_schema(
"id": 2, "id": 2,
"scholar_name": "test sc2h", "scholar_name": "test sc2h",
"opinion_text": "some2 opinions", "opinion_text": "some2 opinions",
"status": "confirmed",
"status": {
"id": 1,
"title": "accepted",
"slug": "accepted",
"color": "green"
},
"created_at": "2025-12-16T11:38:19.646613", "created_at": "2025-12-16T11:38:19.646613",
"updated_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, "id": 1,
"scholar_name": "test sch", "scholar_name": "test sch",
"opinion_text": "some opinions", "opinion_text": "some opinions",
"status": "confirmed",
"status": {
"id": 1,
"title": "accepted",
"slug": "accepted",
"color": "green"
},
"created_at": "2025-12-16T11:38:02.679871", "created_at": "2025-12-16T11:38:02.679871",
"updated_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, "transmitter": 56,
"scholar_name": "Ibn Hajar al-Asqalani", "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.", "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, "id": 2,
"transmitter": 56, "transmitter": 56,
"scholar_name": "Imam al-Dhahabi", "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.", "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, "id": 3,
"transmitter": 56, "transmitter": 56,
"scholar_name": "Ibn Ma'in", "scholar_name": "Ibn Ma'in",
"opinion_text": "Trustworthy and reliable. His narrations are sound and he is considered among the reliable transmitters.", "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"
}
} }
] ]
} }

22
apps/hadis/serializers/hadis.py

@ -293,11 +293,24 @@ class TransmitterOpinionSerializer(serializers.ModelSerializer):
""" Serializer for TransmitterOpinions """ """ Serializer for TransmitterOpinions """
scholar_name = LocalizedField() scholar_name = LocalizedField()
opinion_text = LocalizedField() opinion_text = LocalizedField()
status = serializers.SerializerMethodField()
class Meta: class Meta:
model = TransmitterOpinion model = TransmitterOpinion
fields = ['id','transmitter','scholar_name','opinion_text','status'] 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): class TransmitterOriginalTextSerializer(serializers.ModelSerializer):
""" Serializer for TransmitterOriginalText """ """ Serializer for TransmitterOriginalText """
title = LocalizedField() title = LocalizedField()
@ -355,7 +368,7 @@ class TransmitterSyncSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Transmitters model = Transmitters
fields = [ fields = [
'id', 'full_name', 'biographical', 'scholars_opinions', 'original_texts'
'id', 'full_name','slug' ,'biographical', 'scholars_opinions', 'original_texts'
] ]
def get_biographical(self, obj): def get_biographical(self, obj):
@ -399,7 +412,12 @@ class TransmitterSyncSerializer(serializers.ModelSerializer):
'id': opinion.id, 'id': opinion.id,
'scholar_name': get_localized_text(opinion.scholar_name, request), 'scholar_name': get_localized_text(opinion.scholar_name, request),
'opinion_text': get_localized_text(opinion.opinion_text, 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, 'created_at': opinion.created_at.isoformat() if opinion.created_at else None,
'updated_at': opinion.updated_at.isoformat() if opinion.updated_at else None, 'updated_at': opinion.updated_at.isoformat() if opinion.updated_at else None,
} }

8
apps/hadis/views/transmitter.py

@ -1,4 +1,5 @@
from django.contrib.admin.utils import lookup_field from django.contrib.admin.utils import lookup_field
from django.db.models import Prefetch
from rest_framework.generics import ListAPIView , RetrieveAPIView from rest_framework.generics import ListAPIView , RetrieveAPIView
from rest_framework.response import Response from rest_framework.response import Response
@ -62,7 +63,8 @@ class TransmitterOpinionView(ListAPIView):
return TransmitterOpinion.objects.filter( return TransmitterOpinion.objects.filter(
transmitter__slug=narrator_slug transmitter__slug=narrator_slug
).select_related( ).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( ).prefetch_related(
# Add any nested relations from TransmitterOriginalTextSerializer # Add any nested relations from TransmitterOriginalTextSerializer
# 'translations', # 'translations',
@ -111,8 +113,8 @@ class TransmitterSyncView(ListAPIView):
return ( return (
Transmitters.objects Transmitters.objects
.prefetch_related( .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') .order_by('id')
) )

Loading…
Cancel
Save