[英]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.