问题描述
我正在编写一个 REST API 来创建组并为该组分配权限。
问题: 如何创建 POST 方法,以便我可以创建具有这些权限的组。
这是到目前为止我来的代码片段
Groupserializer
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,**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": "Can change log entry","codename": "change_logentry" }},"pk": 3,"fields": {"name": "可以删除日志条目","codename": "delete_logentry"} },"pk": 4,"fields": {"name": "可以查看日志条目","codename": "view_logentry"}} ]"
对不起,如果我不太清楚 任何帮助将不胜感激!
解决方法
正如错误所述,您不能在第一次创建对象时直接分配 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。