Browse Source

perf(hadis-sync): optimize prefetching for corrections and interpretations to eliminate N+1 queries

master
Mohsen Taba 2 weeks ago
parent
commit
2fb450007e
  1. 42
      apps/hadis/views/hadis.py

42
apps/hadis/views/hadis.py

@ -10,7 +10,7 @@ from rest_framework.response import Response
from django.db.models import Count
from django.db.models import Prefetch
from ..serializers.category import get_localized_text
from ..models import Transmitters, HadisCategory, Hadis, HadisCollection,HadisTransmitter , HadisCorrection ,HadisReference, HadisStatus ,ReferenceImage
from ..models import Transmitters, HadisCategory, Hadis, HadisCollection,HadisTransmitter , HadisCorrection ,HadisReference, HadisStatus ,ReferenceImage, CorrectionReference, HadisInterpretation, InterpretationReference
from ..serializers import HadisListSerializer, HadisBasicSerializer, HadisDetailSerializer, HadisCollectionListSerializer, HadisSyncSerializer,HadisCorrectionSerializer,HadisTransmitterListSerializer , SimpleCategory, NarratorLayerSerializer , PinnedHadisCollectionSerializer, HadisSourceDetailsSerializer
from ..docs import arguments_filters_swagger ,hadis_list_swagger, hadis_detail_swagger, hadis_collections_swagger, hadis_sync_swagger, hadis_transmitters_swagger, hadis_corrections_swagger, hadis_basic_swagger, hadis_main_list_swagger, hadis_layers_swagger
from django.db.models import Q
@ -143,24 +143,44 @@ class HadisSyncView(ListAPIView):
)
)
),
# 👇 اضافه شدن واکشی عمیق برای تصحیحات
# 👇 اضافه شدن واکشی عمیق برای تصحیحات (بدون N+1)
Prefetch(
'hadiscorrection_set',
queryset=HadisCorrection.objects.select_related('hadis').prefetch_related(
'references__book_reference__author',
'references__edition',
'references__book_volume',
'references__images'
Prefetch(
'references',
queryset=CorrectionReference.objects.select_related(
'book_reference',
'book_reference__author',
'edition',
'book_volume',
'book_volume__edition'
).prefetch_related(
'images',
'book_reference__editions',
'book_reference__volumes'
)
)
)
),
# 👇 اضافه شدن واکشی عمیق برای تفاسیر
# 👇 اضافه شدن واکشی عمیق برای تفاسیر (بدون N+1)
Prefetch(
'category__interpretations',
queryset=HadisInterpretation.objects.select_related('category').prefetch_related(
'references__book_reference__author',
'references__edition',
'references__book_volume',
'references__images'
Prefetch(
'references',
queryset=InterpretationReference.objects.select_related(
'book_reference',
'book_reference__author',
'edition',
'book_volume',
'book_volume__edition'
).prefetch_related(
'images',
'book_reference__editions',
'book_reference__volumes'
)
)
)
),
)

Loading…
Cancel
Save