Browse Source

transmitters arguments lists added

master
Mohsen Taba 4 weeks ago
parent
commit
211fe137b4
  1. 8
      apps/hadis/serializers/hadis.py
  2. 6
      apps/hadis/urls.py
  3. 30
      apps/hadis/views/transmitter.py

8
apps/hadis/serializers/hadis.py

@ -440,11 +440,12 @@ class TransmitterSyncSerializer(serializers.ModelSerializer):
scholars_opinions = serializers.SerializerMethodField()
original_texts = serializers.SerializerMethodField()
full_name = LocalizedField()
hadis = serializers.SerializerMethodField()
class Meta:
model = Transmitters
fields = [
'id', 'full_name','slug' ,'biographical', 'scholars_opinions', 'original_texts'
'id', 'full_name','slug' ,'biographical', 'scholars_opinions', 'original_texts','hadis'
]
def get_biographical(self, obj):
@ -517,6 +518,11 @@ class TransmitterSyncSerializer(serializers.ModelSerializer):
}
for t in obj.originaltexts.all() # Already prefetched
]
def get_hadis(self, obj):
# چون از related_name='hadises' در مدل HadisTransmitter استفاده شده،
# لیست تمام رکوردهای واسط را می‌گیریم.
# استفاده از set باعث می‌شود اگر یک راوی در ۲ سند از یک حدیث بود، آیدی آن حدیث تکراری نشود.
return list(set(item.hadis_id for item in obj.hadises.all() if item.hadis_id))

6
apps/hadis/urls.py

@ -2,7 +2,10 @@ from django.urls import path, include
from rest_framework.routers import SimpleRouter
from .views.category import HadisCategorySectListView, HadisCategoryTreeView, CategoriesView, CategoriesBySectView, HadisCategorySelectBySectView, HadisCategorySelectBySectSourceView , HadisCategoryTreeNormalView ,test_deploy,debug_headers,HadisCategoryXMindView
from .views.hadis import HadisCollectionListView, HadisListView, HadisBasicView, HadisDetailView, HadisSyncView, HadisTransmittersView, HadisCorrectionsView,HadisMainListView, HadisFiltersView, HadisLayersView,PinnedHadisCollectionListView, HadisFiltersSyncAPIView
from .views.transmitter import TransmitterView ,TransmitterDetailView, TransmitterSyncView,TransmitterOpinionView, TransmitterOriginalTextView, TransmitterFiltersView
from .views.transmitter import (
TransmitterView ,TransmitterDetailView, TransmitterSyncView,TransmitterOpinionView, TransmitterOriginalTextView, TransmitterFiltersView,
NarratorArgumentsListView
)
from .views.reference import BookDetailView, BookReferencesView, BookReferenceSyncView, BookAttributeView
from .views.reference_v2 import BookReferenceV2DetailView, BookReferenceV2SyncView, BookReferenceV2ListView
from .views.version import ContentReleaseSyncView
@ -89,6 +92,7 @@ urlpatterns = [
path('arguments/filters/', HadisFiltersView.as_view(), name='hadis-filters'),
# Narrator paths
path('narrators/<str:narrator_slug>/arguments', NarratorArgumentsListView.as_view(), name='narrator-arguments'),
path('narrators/<str:narrator_slug>/opinions', TransmitterOpinionView.as_view(), name='narrator-opinions'),
path('narrators/<str:narrator_slug>/original_texts', TransmitterOriginalTextView.as_view(), name='narrator-original-texts'),
path('narrators/<str:narrator_slug>', TransmitterDetailView.as_view(), name='narrator-detail'),

30
apps/hadis/views/transmitter.py

@ -4,12 +4,12 @@ from rest_framework.generics import ListAPIView , RetrieveAPIView
from rest_framework.response import Response
from utils.pagination import StandardResultsSetPagination
from ..models import Transmitters , TransmitterOpinion, TransmitterOriginalText
from ..serializers import TransmitterSerializer , TransmitterDetailSerializer, TransmitterSyncSerializer,TransmitterOpinionSerializer, TransmitterOriginalTextSerializer
from ..models import Transmitters , TransmitterOpinion, TransmitterOriginalText, Hadis
from ..serializers import TransmitterSerializer , TransmitterDetailSerializer, TransmitterSyncSerializer,TransmitterOpinionSerializer, TransmitterOriginalTextSerializer, 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
from ..serializers import HadisListSerializer
class TransmitterFliterView(ListAPIView):
pass
@ -130,7 +130,8 @@ class TransmitterSyncView(ListAPIView):
Transmitters.objects
.prefetch_related(
Prefetch('opinions', queryset=TransmitterOpinion.objects.select_related('status')),
Prefetch('originaltexts', queryset=TransmitterOriginalText.objects.all())
Prefetch('originaltexts', queryset=TransmitterOriginalText.objects.all()),
'hadises'
)
.order_by('id')
)
@ -193,3 +194,24 @@ class TransmitterFiltersView(ListAPIView):
def list(self, request, *args, **kwargs):
return Response(get_transmitter_filters(request))
class NarratorArgumentsListView(ListAPIView):
"""
API view to list all Hadis (arguments) where a specific narrator
exists in the transmission chain (prefetching category and status).
"""
serializer_class = HadisListSerializer
pagination_class = StandardResultsSetPagination
# در صورت نیاز به احراز هویت می‌توانید کامنت زیر را باز کنید:
# authentication_classes = [TokenAuthentication]
def get_queryset(self):
narrator_slug = self.kwargs.get('narrator_slug')
# فیلتر کردن احادیث فعال که این راوی در زنجیره سند (transmitters) آن‌ها حضور دارد
return Hadis.objects.filter(
transmitters__transmitter__slug=narrator_slug,
status=True
).select_related(
'category__sect',
'hadis_status'
).distinct().order_by('id')
Loading…
Cancel
Save