Django的REST框架:更新和删除当前用户无需提供PK

问题描述 投票:0回答:1

我知道有很多人已经被问及与当前用户处理,但让我张贴此我无法找到解决办法。

我想要做的是让,PUT和DELETE当前用户无需提供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)

现在我可以获取当前用户的信息,但是当我尝试更新或删除当前用户,

Asse田:预计视图MyAccountDetail与名为“PK”的URL关键字参数来调用。修复您的网址的conf,或正确设置视图.lookup_field属性。

我该如何解决这个问题?

Update

urlpatterns = [

    path('users/my_account', views.MyAccountDetail.as_view()),
]
django django-rest-framework
1个回答
1
投票

在这种情况下,你需要重写get_object()方法在MyAccountDetail视图。例如:

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_field或lookup_url_kwarg已配置获取的对象。

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

© www.soinside.com 2019 - 2024. All rights reserved.