You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保存Django中用SessionWizard类创建的表单实例?

解决SessionWizard表单数据无法保存到数据库的问题

错误原因

你遇到的'dict' object has no attribute 'save'错误,是因为form_data = [form.cleaned_data for form in form_list]生成的是字典列表,而cleaned_data只是表单验证后的纯数据字典,并不具备模型实例的save()方法。

解决方案

情况1:每个表单对应独立的ModelForm

如果WithdrawForm1和WithdrawForm2都是继承自ModelForm的表单(各自对应不同的模型),直接对表单实例调用save()即可:

修改done方法:

def done(self, form_list, **kwargs):
    # 逐个保存每个表单对应的模型对象
    saved_objects = []
    for form in form_list:
        obj = form.save()
        saved_objects.append(obj)
    
    return render(self.request, 'done.html', {'data': saved_objects})

情况2:两个表单数据属于同一个模型

如果两个表单的字段最终要存入同一个模型,需要合并所有表单的cleaned_data,再创建并保存模型实例:

假设你的目标模型是Withdraw,修改done方法:

from .models import Withdraw  # 导入你的模型

def done(self, form_list, **kwargs):
    # 合并所有表单的验证后数据
    combined_data = {}
    for form in form_list:
        combined_data.update(form.cleaned_data)
    
    # 创建并保存模型对象
    withdraw_obj = Withdraw.objects.create(**combined_data)
    
    return render(self.request, 'done.html', {'data': withdraw_obj})

额外注意事项

  • 确保你的表单类(WithdrawForm1、WithdrawForm2)如果是ModelForm,已经正确关联了对应的模型和字段。
  • 如果涉及文件上传,确认MEDIA_ROOT配置正确,且服务器对该目录有写入权限,你的file_storage配置看起来是正确的,但需要验证实际路径是否存在。

内容的提问来源于stack exchange,提问作者Thaddeaus Iorbee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 07:45:51