Browse Source

feat(narrators): include rich references in narrator original texts endpoint and remove cached_view

master
Mohsen Taba 4 days ago
parent
commit
3d6cff38bd
  1. 10
      apps/hadis/models/transmitter.py
  2. 2
      apps/hadis/urls.py
  3. 21
      apps/hadis/views/transmitter.py

10
apps/hadis/models/transmitter.py

@ -510,7 +510,15 @@ class TransmitterOriginalText(models.Model):
ordering = ('order', 'id') ordering = ('order', 'id')
def __str__(self): 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}" return f"{title} by {self.transmitter}"
def save(self, *args, **kwargs): def save(self, *args, **kwargs):

2
apps/hadis/urls.py

@ -116,7 +116,7 @@ urlpatterns = [
path('narrators/<str:narrator_slug>/students/', cached_view(NarratorStudentsView.as_view()), name='narrator-students'), path('narrators/<str:narrator_slug>/students/', cached_view(NarratorStudentsView.as_view()), name='narrator-students'),
path('narrators/<str:narrator_slug>/arguments/', cached_view(NarratorArgumentsListView.as_view()), name='narrator-arguments'), path('narrators/<str:narrator_slug>/arguments/', cached_view(NarratorArgumentsListView.as_view()), name='narrator-arguments'),
path('narrators/<str:narrator_slug>/opinions/', cached_view(TransmitterOpinionView.as_view()), name='narrator-opinions'), path('narrators/<str:narrator_slug>/opinions/', cached_view(TransmitterOpinionView.as_view()), name='narrator-opinions'),
path('narrators/<str:narrator_slug>/original_texts/', cached_view(TransmitterOriginalTextView.as_view()), name='narrator-original-texts'),
path('narrators/<str:narrator_slug>/original_texts/', TransmitterOriginalTextView.as_view(), name='narrator-original-texts'),
path('narrators/<str:narrator_slug>/', cached_view(TransmitterDetailView.as_view()), name='narrator-detail'), path('narrators/<str:narrator_slug>/', cached_view(TransmitterDetailView.as_view()), name='narrator-detail'),
path('narrators/', cached_view(TransmitterView.as_view()), name='narrators'), path('narrators/', cached_view(TransmitterView.as_view()), name='narrators'),

21
apps/hadis/views/transmitter.py

@ -12,8 +12,8 @@ from drf_yasg.utils import swagger_auto_schema
from ..models import Transmitters, HadisTransmitter from ..models import Transmitters, HadisTransmitter
from ..serializers import NarratorRelationSerializer from ..serializers import NarratorRelationSerializer
from utils.pagination import StandardResultsSetPagination 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 ..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 utils.pagination import NoPagination
from .category import get_localized_text from .category import get_localized_text
@ -102,7 +102,7 @@ class TransmitterOpinionView(ListAPIView):
class TransmitterOriginalTextView(ListAPIView): class TransmitterOriginalTextView(ListAPIView):
serializer_class = TransmitterOriginalTextSerializer
serializer_class = TransmitterOriginalTextDetailSerializer
pagination_class = StandardResultsSetPagination pagination_class = StandardResultsSetPagination
@transmitter_original_text_swagger @transmitter_original_text_swagger
@ -117,8 +117,19 @@ class TransmitterOriginalTextView(ListAPIView):
).select_related( ).select_related(
'transmitter' 'transmitter'
).prefetch_related( ).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'
)
)
) )

Loading…
Cancel
Save