django 修改request.get或request.post提示:This QueryDict instance is immutable

 Pala   2018-09-13 23:50   145 人阅读  0 条评论

背景:

django版本 2.1.1

代码:

from django.shortcuts import render

def login(request):
    data=request.POST
    data['name']='chenxinming'
    return render(request,'login.html')

提示错误信息:

AttributeError: This QueryDict instance is immutable

解决办法:

查阅官方文档,发现QueryDict实例变成一个不可修改。

官方文档解释:

在正常的请求/响应周期中访问时,QueryDicts request.POST和request.GET将是不可变的。要获得可变版本,您需要使用QueryDict.copy()。

代码:

第一种解决方法:

from django.shortcuts import render

def login(request):
    data=request.POST.copy()
    data['name']='chenxinming'
    return render(request,'login.html')

第二种解决方法:

from django.shortcuts import render

def login(request):
    data=request.POST
    # 记住旧的方式 默认为False
    _mutable = data._mutable
    # 设置_mutable为True
    data._mutable = True
    # 改变你想改变的数据
    data['name']='chenxinming'
    # 恢复_mutable原来的属性
    data._mutable = _mutable
    return render(request,'login.html')


本文地址:http://chenxm.cc/post/708.html
版权声明:本文为原创文章,版权归 Pala 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?