簡體   English   中英

將權限添加到組 - Django-rest-framework

[英]Add the permissions to the Group - Django-rest-framework

我正在編寫 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”}}]”

對不起,如果我不是很清楚任何幫助將不勝感激!

如錯誤所述,您無法在首次創建 object 時直接分配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)


# ...

我想通了,它是這樣的。

        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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM