Override RetrieveUpdateAPIView Django Rest Framework

Viewed 45

Right now I'm overriding the whole retrieve and update function. I want to override only that part, it does not ask for the pk value. Thanks

View.py

class EmployeeView(generics.RetrieveUpdateAPIView):

   permission_classes = [EmployeePermission]
   serializer_class = EmployeeSerializers

   def retrieve(self, request, *args, **kwargs):
       employee = Employee.objects.get(user=self.request.user)
       serializer = EmployeeSerializers(employee)
       return Response(serializer.data)

   def update(self, request, *args, **kwargs):
       employee_user = Employee.objects.get(user=self.request.user)
       serializer = EmployeeSerializers(employee_user, data=request.data)
       if serializer.is_valid():
           serializer.save()
           return Response(serializer.data)
       return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)strong text

urls.py

path('viewEmployee/', views.EmployeeView.as_view()),
1 Answers

what you need is to override the get_queryset method, and write your custom filtering, then django will take care of otherthings.

class EmployeeView(generics.RetrieveUpdateAPIView):
   queryset = Employee.objects.all()
   permission_classes = [EmployeePermission]
   serializer_class = EmployeeSerializers

   def get_queryset(self):
        return super().get_queryset().filter(
            user=self.request.user
        )
Related