Как я могу передать id в качестве аргумента для удаления или исправления пользователя?

Я пытаюсь установить конечные точки для PATCH или DELETE пользователей в соответствии с разрешением, но мой текущий код позволяет мне применять эти изменения только к учетной записи, в которую я вошел. Есть ли способ передать id или email в качестве аргумента в теле запроса для изменения других учетных записей без использования ID в URL? Спасибо.

serializers.py


class UserModifySerializer(serializers.ModelSerializer):

     class Meta:
         model = User
         exclude = ['id', 'user_role']


class UserSerializer(serializers.ModelSerializer):
     organization = OrganizationSerializer(read_only=True)

     class Meta:
         model = User
         fields = ['id', 'email', 'first_name', 'last_name', 'organization', 'user_role', 'language']

models.py


class UserViewSet(mixins.UpdateModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet):
     swagger_schema = None
     serializer_class = UserSerializer

    @action(detail=False, methods=['patch'], permission_classes = [IsAuthenticated], url_path='modify-user')
def update_user(self, request):
    user = User.objects.get(id=self.request.user.id)
    if user.user_role in [Roles.ORGANIZATION_USER, Roles.ORGANIZATION_ADMIN, Roles.WEBSITE_ADMIN]:
        serializer = UserModifySerializer(user, data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save(**serializer.validated_data)
        return Response(status=status.HTTP_200_OK)
    return Response(status=status.HTTP_401_UNAUTHORIZED)


    @action(detail=False, methods=['delete'], permission_classes = [IsWebsiteAdmin, IsOrganizationAdmin])
def delete_member(self, request):
    user = User.objects.get(id=self.request.user.id)
    if user.user_role in [Roles.ORGANIZATION_ADMIN, Roles.WEBSITE_ADMIN]:
        members = User.objects.filter(organization=self.request.user.organization)\
            .filter(id=id).delete()
        return Response(status=status.HTTP_200_OK)
    return Response(status=status.HTTP_401_UNAUTHORIZED)

Вы можете поместить необходимые данные в формате json в тело запроса и затем получить доступ к ним в представлении следующим образом:

data = json.loads(request.body)

Как вы разместите данные, зависит от того, как вы вызываете представление.

Вернуться на верх