Проблема с передачей 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()),
надеюсь, это поможет вам.