diff --git a/guardian/serializers.py b/guardian/serializers.py index a0a85a6..845f331 100644 --- a/guardian/serializers.py +++ b/guardian/serializers.py @@ -183,10 +183,16 @@ class TaskDetailsSerializer(serializers.ModelSerializer): class TopJuniorSerializer(serializers.ModelSerializer): junior = JuniorDetailSerializer() + position = serializers.SerializerMethodField() class Meta: model = JuniorPoints - fields = ['id', 'junior', 'total_task_points', 'created_at', 'updated_at'] + fields = ['id', 'junior', 'total_task_points', 'position', 'created_at', 'updated_at'] + + def get_position(self, obj): + queryset = self.context['view'].get_queryset() + position = list(queryset).index(obj) + 1 + return position class GuardianProfileSerializer(serializers.ModelSerializer): diff --git a/guardian/views.py b/guardian/views.py index e0f2bef..ff6e332 100644 --- a/guardian/views.py +++ b/guardian/views.py @@ -143,11 +143,18 @@ class SearchTaskListAPIView(viewsets.ModelViewSet): class TopJuniorListAPIView(viewsets.ModelViewSet): """Top juniors list""" serializer_class = TopJuniorSerializer - permission_classes = [IsAuthenticated] + # permission_classes = [IsAuthenticated] queryset = JuniorPoints.objects.all() + + def get_serializer_context(self): + context = super().get_serializer_context() + context.update({'view': self}) + return context + def list(self, request, *args, **kwargs): """fetch junior list those complete their task""" junior_total_points = self.get_queryset().order_by('-total_task_points') serializer = self.get_serializer(junior_total_points, many=True) return custom_response(serializer.data, response_status=status.HTTP_200_OK) +