Django rest framework 在Django rest框架中更新用户信息权限

Django rest framework 在Django rest框架中更新用户信息权限,django-rest-framework,Django Rest Framework,我已将更新方法的权限设置为仅允许管理员用户更新用户信息,但由于某些原因,当我以普通用户身份登录时,我也可以更新用户信息。我能做些什么来避免这种情况?其他方法也可以 class CustomUserViewSet(viewsets.ModelViewSet): queryset = models.CustomUser.objects.all() serializer_class = serializers.CustomUserSerializer parser_classe

我已将更新方法的权限设置为仅允许管理员用户更新用户信息,但由于某些原因,当我以普通用户身份登录时,我也可以更新用户信息。我能做些什么来避免这种情况?其他方法也可以

class CustomUserViewSet(viewsets.ModelViewSet):
    queryset = models.CustomUser.objects.all()
    serializer_class = serializers.CustomUserSerializer
    parser_classes = [JSONParser]

    permission_classes_by_action = {
        'create': [IsAdminUser], 'list': [IsAdminUser], 'retrieve': [IsAuthenticated],
        'update': [IsAdminUser], <--already set here
        'destroy': [IsAdminUser,]
    }

    def update(self, request, *args, **kwargs):
        return super(CustomUserViewSet, self).update(request, *args, **kwargs)

    # some other methods

    def get_permissions(self):
        try:
            # return permission_classes depending on `action`
            return [permission() for permission in self.permission_classes_by_action[self.action]]
        except KeyError:
            # action is not set return default permission_classes
            return [permission() for permission in self.permission_classes]
class CustomUserViewSet(ViewSet.ModelViewSet):
queryset=models.CustomUser.objects.all()
serializer\u class=serializers.CustomUserSerializer
parser_classes=[JSONParser]
权限\u类\u按\u操作={
“创建”:[IsAdminUser],“列表”:[IsAdminUser],“检索”:[IsAuthenticated],
“更新”:[IsAdminUser],在DRF视图集中,HTTP修补程序方法映射为动作名称
部分更新
。因此,您必须按以下方式更新
权限类
permission_classes_by_action = {
    'create': [IsAdminUser],
    'list': [IsAdminUser],
    'retrieve': [IsAuthenticated],
    'update': [IsAdminUser],

    'partial_update': [IsAdminUser],

    'destroy': [IsAdminUser, ]
}
permission\u classes\u by\u action={
“创建”:[IsAdminUser],
“列表”:[IsAdminUser],
“检索”:[IsAuthenticated],
“更新”:[IsAdminUser],
“部分更新”:[IsAdminUser],
“销毁”:[IsAdminUser,]

}
哪个http方法用于更新值?http PUT还是http PATCH?它的修补方法如果我使用PUT方法,它会说
密码字段是必需的
我已经尝试过了。使用
patial\u update
我得到了两种方法
PUT
PATCH
。我仍然可以更新补丁中的用户信息,如果我使用PUT,它就会更新says
password字段是require
删除
try…except
子句,看看当我写下你说的内容并删除try和exept并只保留第一个return语句时发生了什么,它说
return[permission()for permission in self.permission\u classes\u by\u action[self.action]]KeyError:None
现在可以使用了,谢谢!我从来没有注意到我必须同时进行
更新
部分更新
。谢谢。