我知道很多人已经问过与当前用户打交道的问题,但是我找不到解决方案,所以我将其发布。
我想要做的是获取,放置和删除当前用户,而无需提供pk
。
我想将端点设置为users/my_account
我当前的代码在这里
class MyAccountDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = CustomUser.objects.all()
serializer_class = UserSerializer
def get(self, request):
serializer = UserSerializer(request.user)
return Response(serializer.data)
现在我可以获取当前用户的信息,但是当我尝试更新或删除当前用户时,
AssertionError:预期使用名为“ pk”的URL关键字参数调用视图MyAccountDetail。修复您的URL conf,或在视图上正确设置
.lookup_field
属性。
我该如何解决?
urlpatterns = [
path('users/my_account', views.MyAccountDetail.as_view()),
]
答案 0 :(得分:1)
在这种情况下,您将需要在MyAccountDetail
视图中覆盖get_object()方法。例如:
from rest_framework.permissions import IsAuthenticated
class MyAccountDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = CustomUser.objects.all()
serializer_class = UserSerializer
permission_classes = (IsAuthenticated,)
def get_object(self):
return self.request.user
您需要这样做,因为默认情况下,get_object
方法会在URL中查找lookup_url_kwarg
或lookup_field
,然后它将尝试使用{{1}来获取对象。 }或您在 lookup_field 或 lookup_url_kwarg 中配置的任何内容。
仅供参考,我还添加了一个权限类,因为如果没有权限类,pk
将是一个匿名用户,因此将引发错误。