####** 对于提示不能修改request.POST,request.GET的错误**
最近,在玩drf开发,想要根据不同的需求对request.POST中添加user,发现报了错This QueryDict instance is immutable,发现这个QueryDict实例不能够修改。
经过查阅了官方文档和网上的博客,解决了问题。
解决方法:
法一:
使用request.POST.copy()生成一份副本,对副本进行validated。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| def post(self, request): data = request.data.copy() data['user'] = request.user serializer = Serializers_address(data=request.data) if serializer.is_valid(): is_true = serializer.create(**request.data) if is_true: return Response(response_code.address_add_success) else: return Response(response_code.server_error) return Response(serializer.errors)
|
法二:
法二是参见了网上博客的一种方式:
1 2 3 4 5 6 7 8 9 10 11
| def login(request): data=request.POST _mutable = data._mutable data._mutable = True data['name']='chenxinming' data._mutable = _mutable return render(request,'login.html')
|
说明:
这种方法中,_mutable相当于控制能否修改的开关,当_mutable为True时,可以修改,不过这种方式违背了“私有属性”的规则,类外是不能够访问_mutable的,所以尽量使用第一种方式,遵循python开发规则吧!!!