Django Rest Framework:在不提供 pk 的情况下更新和删除当前用户



我知道很多人已经询问了当前用户的处理问题,但我找不到解决方案,所以我发布了这个。

我想做的是在不提供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_kwarglookup_field,并从中尝试使用 pk 或您在 lookup_fieldlookup_url_kwarg 中配置的任何内容来获取对象。

仅供参考,我还添加了一个权限类,因为没有它,self.request.user将成为匿名用户,因此会抛出错误。

相关内容

最新更新