from rest_framework.generics import ListAPIView, RetrieveAPIView from django.shortcuts import get_object_or_404 from ..models import HadisCategory, Hadis from ..serializers import HadisListSerializer, HadisDetailSerializer from ..docs import hadis_list_swagger, hadis_detail_swagger class HadisListView(ListAPIView): """ API view to list Hadis by category_id """ serializer_class = HadisListSerializer @hadis_list_swagger def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs) def get_queryset(self): category_id = self.kwargs.get('category_id') if not HadisCategory.objects.filter(id=category_id).exists(): return Hadis.objects.none() return Hadis.objects.filter( category_id=category_id, status=True ).order_by('number') class HadisDetailView(RetrieveAPIView): """ API view to retrieve detailed Hadis information by hadis_id """ serializer_class = HadisDetailSerializer lookup_field = 'id' lookup_url_kwarg = 'hadis_id' @hadis_detail_swagger def get(self, request, *args, **kwargs): return self.retrieve(request, *args, **kwargs) def get_queryset(self): return Hadis.objects.filter(status=True).select_related( 'category', 'hadis_status' ).prefetch_related( 'tags', 'hadistransmitter_set__transmitter', 'hadisreference_set__book', 'hadisreference_set__images' )