4

I have a viewset on a "/me" endpoint that doesn't require a lookup_field for detailing, as it uses the current request user for filtering, retrieving a single result.

class ClientProfileDetail(
    mixins.RetrieveModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet
):
    permission_classes = [IsOwnerOrAdmin]
    queryset = ClientProfile.objects.all()
    serializer_class = ClientProfileSerializer

    def get_object(self):
        queryset = self.get_queryset()
        obj = get_object_or_404(queryset, pk=self.request.user)
        return obj

I'm registering the viewset using the default router:

router.register(r"me", ClientProfileDetail) 

But even though i have no use for the on the URL, the router register these URLs:

profile/ ^me/(?P<pk>[^/.]+)/$ [name='clientprofile-detail'] 
profile/ ^me/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$ [name='clientprofile-detail'] 

My question is: How can i remove the (?P<pk>[/.]+)/$ on my routes

Overriding get_object() as explained here: RetrieveAPIView without lookup field? didn't work

1 Answers1

-2

You can try it

class ClientProfileDetail(mixins.UpdateModelMixin, viewsets.GenericViewSet):
    permission_classes = [IsOwnerOrAdmin]
    queryset = ClientProfile.objects.all()
    serializer_class = ClientProfileSerializer

    def get(request, *args, **kwargs):
       serilizer = self.serializer_class(request.user, many=False)
       return Response(serilizer.data)
  • 2
    Users find it difficult to understand code only answers with no explanation. Please consider adding some description explaining how it solves the problem. – Azhar Khan Dec 09 '22 at 05:14