form实例化对象显示“str“ object has no attribute “get“

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’。百度了全网都没有搜到答案,边绝望边改错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值