Проблема с передачей kwargs в django rest

Я создал простой конечный пункт о детализации пользователя с default_lookup = pk и, если pk == 9_999_999_999, я хочу вернуть пользователя, который уже вошел в систему. Я предполагаю, что моя проблема связана с kwargs, может я делаю что-то не так?

class UserDetailView(generics.RetrieveUpdateDestroyAPIView):
serializer_class = UserSerializer
queryset = User.objects.all()

def get(self,*args,**kwargs):
    pk = kwargs.get('pk')
    print(kwargs)
    print(f"pk {pk}")
    if pk == 9999999999:
        kwargs['pk'] = self.request.user.id
    print(kwargs)
    return self.retrieve(self,*args,**kwargs)

и вывод:

{'pk': 9999999999} 
pk 9999999999
{'pk': 13}
Not Found: /api/users/9999999999

Вы можете сделать что-то вроде этого, чтобы сделать проще.

class UserDetailView(generics.RetrieveUpdateDestroyAPIView):
serializer_class = UserSerializer
queryset = User.objects.all()

def get_queryset(self):
    pk = kwargs.get('pk')
    print(kwargs)
    print(f"pk {pk}")
    if pk == 9999999999:
        kwargs['pk'] = self.request.user.id
    print(kwargs)
    return self.retrieve(self,*args,**kwargs)

и ваши URL должны выглядеть следующим образом

path('name/<int:pk>/', views.UserDetailView.as_view()),

надеюсь, это поможет вам.

Вернуться на верх