diff --git a/apps/hadis/models/transmitter.py b/apps/hadis/models/transmitter.py index 2ff1ae8..946c630 100644 --- a/apps/hadis/models/transmitter.py +++ b/apps/hadis/models/transmitter.py @@ -510,7 +510,15 @@ class TransmitterOriginalText(models.Model): ordering = ('order', 'id') def __str__(self): - title = self.title[0]['text'] if self.title else "Untitled" + title = None + if self.title: + first_item = self.title[0] if isinstance(self.title, list) and self.title else self.title + if isinstance(first_item, dict): + title = first_item.get('text') or first_item.get('value') or first_item.get('title') + elif isinstance(first_item, str): + title = first_item + if not title: + title = "Untitled" return f"{title} by {self.transmitter}" def save(self, *args, **kwargs): diff --git a/apps/hadis/urls.py b/apps/hadis/urls.py index 1c3be31..ff4c039 100644 --- a/apps/hadis/urls.py +++ b/apps/hadis/urls.py @@ -116,7 +116,7 @@ urlpatterns = [ path('narrators//students/', cached_view(NarratorStudentsView.as_view()), name='narrator-students'), path('narrators//arguments/', cached_view(NarratorArgumentsListView.as_view()), name='narrator-arguments'), path('narrators//opinions/', cached_view(TransmitterOpinionView.as_view()), name='narrator-opinions'), - path('narrators//original_texts/', cached_view(TransmitterOriginalTextView.as_view()), name='narrator-original-texts'), + path('narrators//original_texts/', TransmitterOriginalTextView.as_view(), name='narrator-original-texts'), path('narrators//', cached_view(TransmitterDetailView.as_view()), name='narrator-detail'), path('narrators/', cached_view(TransmitterView.as_view()), name='narrators'), diff --git a/apps/hadis/views/transmitter.py b/apps/hadis/views/transmitter.py index 4f4e0bd..e8a8109 100644 --- a/apps/hadis/views/transmitter.py +++ b/apps/hadis/views/transmitter.py @@ -12,8 +12,8 @@ from drf_yasg.utils import swagger_auto_schema from ..models import Transmitters, HadisTransmitter from ..serializers import NarratorRelationSerializer from utils.pagination import StandardResultsSetPagination -from ..models import Transmitters , TransmitterOpinion, TransmitterOriginalText, Hadis -from ..serializers import TransmitterSerializer , TransmitterDetailSerializer, TransmitterSyncSerializer,TransmitterOpinionSerializer, TransmitterOriginalTextSerializer, HadisListSerializer +from ..models import Transmitters, TransmitterOpinion, TransmitterOriginalText, Hadis, OriginalTextReference, OriginalTextReferenceImage +from ..serializers import TransmitterSerializer, TransmitterDetailSerializer, TransmitterSyncSerializer, TransmitterOpinionSerializer, TransmitterOriginalTextSerializer, TransmitterOriginalTextDetailSerializer, HadisListSerializer from ..docs import transmitter_filters_swagger,transmitter_list_swagger, transmitter_detail_swagger, transmitter_sync_swagger, transmitter_opinion_swagger, transmitter_original_text_swagger from utils.pagination import NoPagination from .category import get_localized_text @@ -102,7 +102,7 @@ class TransmitterOpinionView(ListAPIView): class TransmitterOriginalTextView(ListAPIView): - serializer_class = TransmitterOriginalTextSerializer + serializer_class = TransmitterOriginalTextDetailSerializer pagination_class = StandardResultsSetPagination @transmitter_original_text_swagger @@ -117,8 +117,19 @@ class TransmitterOriginalTextView(ListAPIView): ).select_related( 'transmitter' ).prefetch_related( - 'references__images', - 'references__book_reference', + Prefetch( + 'references', + queryset=OriginalTextReference.objects.select_related( + 'book_reference', + 'book_reference__author', + 'edition', + 'book_volume', + 'book_volume__edition' + ).prefetch_related( + Prefetch('images', queryset=OriginalTextReferenceImage.objects.order_by('priority')), + 'book_reference__editions' + ) + ) )