我知道很多人已经询问了当前用户的处理问题,但我找不到解决方案,所以我发布了这个。
我想做的是在不提供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)
现在我可以获取当前用户的信息,但是当我尝试更新或删除当前用户时,
断言错误:预期视图 MyAccountDetail 将使用名为"pk"的 URL 关键字参数调用。修复您的网址 conf,或正确设置视图上的
.lookup_field
属性。
我该如何解决这个问题?
更新
urlpatterns = [
path('users/my_account', views.MyAccountDetail.as_view()),
]
在这种情况下,您需要在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
,并从中尝试使用 pk
或您在 lookup_field 或 lookup_url_kwarg 中配置的任何内容来获取对象。
仅供参考,我还添加了一个权限类,因为没有它,self.request.user
将成为匿名用户,因此会抛出错误。