from django.contrib.admin.utils import lookup_field from rest_framework.generics import ListAPIView , RetrieveAPIView from ..models import Transmitters , TransmitterOpinion from ..serializers import TransmitterSerializer , TransmitterDetailSerializer from ..docs import transmitter_list_swagger, transmitter_detail_swagger from utils.pagination import NoPagination class TransmitterView(ListAPIView): queryset = Transmitters.objects.all() serializer_class = TransmitterSerializer @transmitter_list_swagger def get(self, request, *args, **kwargs): return super().get(request, *args, **kwargs) def get_queryset(self): queryset = Transmitters.objects.all() # Filter by status (reliability) status_filter = self.request.query_params.get('status', None) if status_filter: queryset = queryset.filter(reliability=status_filter) # Filter by madhhab madhhab_filter = self.request.query_params.get('madhhab', None) if madhhab_filter: queryset = queryset.filter(madhhab=madhhab_filter) # Filter by generation (narrator layer) # generation_filter = self.request.query_params.get('generation', None) # if generation_filter: # try: # generation_num = int(generation_filter) # # Filter transmitters who have hadis transmissions in the specified generation/layer # queryset = queryset.filter( # hadi=generation_num # ).distinct() # except (ValueError, TypeError): # pass # Invalid generation number, ignore filter return queryset class TransmitterDetailView(RetrieveAPIView): serializer_class = TransmitterDetailSerializer lookup_field = 'id' lookup_url_kwarg = 'transmitters_id' @transmitter_detail_swagger def get(self, request, *args, **kwargs): return super().get(request, *args, **kwargs) def get_queryset(self): input = self.kwargs['transmitters_id'] return Transmitters.objects.filter(id=input)