【问题标题】:Add the permissions to the Group - Django-rest-framework将权限添加到组 - Django-rest-framework
【发布时间】:2021-06-19 17:16:26
【问题描述】:

我正在编写一个 REST API 来创建组并为该组分配权限。

问题: 如何创建 POST 方法以便我可以创建具有这些权限的组。

这是到目前为止我来的代码片段

组序列化器

class GroupSerializer(serializers.ModelSerializer):    
class Meta:
    model = Group
    fields = ('name','permissions')

观看次数

class UsersGroupCreateView(APIView):
permission_classes = [IsAdminUser]

def post(self , request , *args, **kwargs):
    serializer = GroupSerializer(data = request.data)
    
    if serializer.is_valid():
        data = serializer.validated_data
        group = Group.objects.create(name = data.get('name'), permissions = 
                                     data.get('permissions'))
    
        return Response({"status":"Group Created"},status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST

class GetPerm(APIView):

def get(self, request, *args, **kwargs):

    permissions = serializers.serialize('json', Permission.objects.all())
    return Response(permissions)
    

GetPerm() 的权限包含以下数据:

"[{"model": "auth.permission", "pk": 1, "fields": {"name": "可以添加日志条目", "content_type": 1, "codename": "add_logentry "}}, {"model": "auth.permission", "pk": 2, "fields": {"name": "可以更改日志条目", "content_type": 1, "codename": "change_logentry" }},{“model”:“auth.permission”,“pk”:3,“fields”:{“name”:“可以删除日志条目”,“content_type”:1,“codename”:“delete_logentry”} }, {"model": "auth.permission", "pk": 4, "fields": {"name": "可以查看日志条目", "content_type": 1, "codename": "view_logentry"}} ]"

对不起,如果我不太清楚 任何帮助将不胜感激!

【问题讨论】:

  • 您到底遇到了什么问题?
  • 我已经编辑了这个问题,希望你能得到线索。抱歉@JPG,如果我不具体。​​

标签: python django django-rest-framework django-permissions


【解决方案1】:

由于错误状态,您不能在首次创建对象时直接分配ManyToMany 关系。您需要在 之后手动完成:

 # ...
    if serializer.is_valid():
        data = serializer.validated_data

        group = Group.objects.create(name = data.get('name'))
        [group.permissions.add(p) for p in data.get('permissions')]
    
        return Response({"status":"Group Created"},status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)


# ...

【讨论】:

    【解决方案2】:

    我想通了,是这样的。

            group = Group.objects.create(name = data.get('name'))
            try:
                permissions = request.data.get('permissions')
                for permission_index in permissions:
                    permission=Permission.objects.get(id=permission_index)
                    group.permissions.add(permission)
            except Exception as e:
                print("Error in creating")
            return Response({"status":"Group Created"},status=status.HTTP_201_CREATED)
    

    还要感谢@afonso。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 2016-06-17
      • 1970-01-01
      • 2014-08-27
      • 2013-06-16
      相关资源
      最近更新 更多