用django开发接口,用postman测的好好的,前端反馈请求一直500,奇了怪了,查看请求确实有报错:This QueryDict instance is immutable。
开启调试,在修改请求体的时候报错了,实例如下:
1 2 3 4 5 6 7 8
| def create(self, request, *args, **kwargs): case_status = 1 if request.query_params.get("status", '1') == "1" else 2 data = request.data data["status"] = case_status data.pop("recommend", None)
|
解决方案
查阅官方文档,发现QueryDict实例变成一个不可修改。
官方解释
在正常的请求/响应周期中访问时,QueryDicts request.POST和request.GET将是不可变的。要获得可变版本,您需要使用QueryDict.copy()。
方案一:
1 2 3 4 5 6 7 8
| def create(self, request, *args, **kwargs): case_status = 1 if request.query_params.get("status", '1') == "1" else 2 data = request.data.copy() data["status"] = case_status data.pop("recommend", None)
|
方案二:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| def create(self, request, *args, **kwargs): case_status = 1 if request.query_params.get("status", '1') == "1" else 2 data = request.data _mutable = data._mutable data._mutable = True data["status"] = case_status data.pop("recommend", None) data._mutable = _mutable
|