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

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>/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>/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/', 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 ..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'
)
)
)

Loading…
Cancel
Save