from .myModelSerializer import MyModelSerializer from backend_app.permissions import DEFAULT_VIEWSET_PERMISSIONS from rest_framework import viewsets class MyModelViewSet(viewsets.ModelViewSet): serializer_class = MyModelSerializer permission_classes = DEFAULT_VIEWSET_PERMISSIONS LIST_SHOULD_BE_DETAIL = False def list(self, request, *args, **kwargs): response = super(viewsets.ModelViewSet, self).list( # pylint: disable=E1003 request, *args, **kwargs ) # call the original 'list' if self.LIST_SHOULD_BE_DETAIL: if len(response.data) == 0: response.data = dict() elif len(response.data) == 1: response.data = response.data[0] else: raise Exception( "There should be no more than one element in the queryset, check it !" ) return response def get_queryset(self): """ Extended default rest framework behavior to prefetch some table and enhance performances """ self.my_model_queryset = self.queryset.prefetch_related( "moderated_by", "updated_by", "pending_moderation" ) return self.extend_queryset() def extend_queryset(self): """ Function to extend get_queryset when subclassing """ return self.my_model_queryset