Django Rest Framework:不提供pk即可更新和删除当前用户

时间:2019-02-11 11:55:02

标签: django django-rest-framework

我知道很多人已经问过与当前用户打交道的问题,但是我找不到解决方案,所以我将其发布。

我想要做的是获取,放置和删除当前用户,而无需提供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()),
]

1 个答案:

答案 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_kwarglookup_field,然后它将尝试使用{{1}来获取对象。 }或您在 lookup_field lookup_url_kwarg 中配置的任何内容。

仅供参考,我还添加了一个权限类,因为如果没有权限类,pk将是一个匿名用户,因此将引发错误。