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,
"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"
}
}
]
}

22
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,
}

8
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')
)

Loading…
Cancel
Save