我知道有很多人已经被问及与当前用户处理,但让我张贴此我无法找到解决办法。
我想要做的是让,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
属性。
我该如何解决这个问题?
urlpatterns = [
path('users/my_account', views.MyAccountDetail.as_view()),
]
在这种情况下,你需要重写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_kwarg
或lookup_field
,并从它会尝试使用pk
或者你在lookup_field或lookup_url_kwarg已配置获取的对象。
仅供参考,我添加了一个许可权类为好,因为没有它,self.request.user
将是一个匿名用户,因此将抛出错误。