You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.5 KiB
50 lines
1.5 KiB
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'
|
|
)
|