django中实例化modelform对象出现"str" object has no attribute "get"报错
报错信息:在使用django实例化form对象时显示"str" object has no attribute “get”。具体是data.get(name)这个语句有问题,显示为str类型,所以没有get取值方式。报错信息如下图所示
在我自己写的代码里是form=WikiModelForm(request,data=request.POST)
报错(这个request参数是我自己传的一个参数)。我仔细检查输出了request.POST是正确的Queryset类型。在widgets.py中打印出data是一个字符串’data’。输出如下所示。
解决方法:将form=WikiMOdelForm(request,data=request.POST)
修改为form=WikiMOdelForm(request,request.POST)
就可以运行成功了。
同样遇到传入instance=wiki_object也会出现这个问题。但是这个时候也需要使用位置传参的方法来解决。modelform中的位置参数和顺序如下所示。其中我们要将wiki_object作为instance传入,error_class不能为None,要引入ErrorList。
原代码:form=WikiModelForm(request,instance=wiki_object)
修改后:
from django.forms.utils import ErrorList
form=WikiModelForm(request,None, None, None, None, None, ErrorList, None, None, wiki_object)
这个问题我也不知道什么原因,说实话我是一点都不懂,出现这两个报错的时候改了两三天。最后还是看了源码和问了gpt才想到用位置传参。不懂为什么用关键词传参传不进去,传入instance=wiki_object,显示instance是一个字符串’instance’。百度了全网都没有搜到答案,边绝望边改错。