Django中request.POST不能修改属性值的问题

####** 对于提示不能修改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
# request.data['user'] = 2
serializer = Serializers_address(data=request.data)
if serializer.is_valid():
# 会调用各字段的validators验证器
# 传入data数据实例化serializer对象,才可以调用is_valid()方法,才能校验获取validated_data
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
# 设置_mutable为True
data._mutable = True
# 改变你想改变的数据
data['name']='chenxinming'
# 恢复_mutable原来的属性
data._mutable = _mutable
return render(request,'login.html')

说明:

这种方法中,_mutable相当于控制能否修改的开关,当_mutable为True时,可以修改,不过这种方式违背了“私有属性”的规则,类外是不能够访问_mutable的,所以尽量使用第一种方式,遵循python开发规则吧!!!