Django使用inlineformset保存表单时报错:'WSGIRequest'对象无'get'属性
问题根因
错误来自两处代码编写失误:
- 实例化inline表单集时参数传错:Django表单/表单集接收的第一个参数是提交的表单数据
request.POST,而非整个request对象。你直接把request传入表单集,表单内部尝试调用.get()方法读取字段值时,WSGIRequest对象本身没有这个方法,就抛出了对应的属性错误。 - 表单验证调用方式错误:
is_valid是需要执行的方法,必须加括号调用,否则直接判断方法对象的布尔值永远为True,不会实际执行表单校验逻辑。
修复方案
直接替换views.py中的createOrder视图代码即可:
def createOrder(request, pk): OrderFormSet= inlineformset_factory(Customer, Order, fields=('product', 'status')) customer = Customer.objects.get(id=pk) form_set_value= OrderFormSet(instance=customer) if request.method == 'POST': # 第一个参数传入POST数据而非整个request对象 form_set_value= OrderFormSet(request.POST, instance=customer) # is_valid是方法,需要加括号调用执行校验 if form_set_value.is_valid(): form_set_value.save() return redirect('/') context = {'form_set_key':form_set_value} return render(request, 'accounts/order_form.html', context)
如果后续表单涉及文件上传需求,修改实例化代码为OrderFormSet(request.POST, request.FILES, instance=customer)即可。
内容的提问来源于stack exchange,提问作者Lewcamps
相关产品推荐
相关产品推荐

