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

Django Formset提交报错:'ColumnFormFormSet'无save属性如何解决?

解决Django Formset提交时抛出'... object has no attribute 'save''的错误

问题根源

用formset_factory创建的普通表单集没有内置save()方法,只有基于ModelForm的ModelFormSet(通过modelformset_factory生成)才支持直接调用save()批量保存数据。


推荐解决方案:改用modelformset_factory

替换原有表单集创建方式,使用专门为ModelForm设计的modelformset_factory,它自带批量保存功能。

修改后的views.py代码

from .forms import ColumnForm
from django.forms import modelformset_factory
from django.shortcuts import redirect, render
from .models import Column  # 需导入Column模型

def design(request):
    # 用modelformset_factory创建表单集,指定关联模型、表单类和额外字段数
    ColumnFormSet = modelformset_factory(Column, form=ColumnForm, extra=30)
    if request.method == 'POST':
        formset = ColumnFormSet(request.POST)
        if formset.is_valid():
            formset.save()  # 现在可正常调用save()批量保存
            return redirect('Home')
    else:
        # 传入空queryset,避免默认显示数据库中已有的Column记录
        formset = ColumnFormSet(queryset=Column.objects.none())
    return render(request, 'design.html', {'formset': formset})

关键说明

  • modelformset_factory必须指定对应的模型(Column)和使用的表单类(ColumnForm)
  • 添加queryset=Column.objects.none()后,表单集默认只显示30个空表单,不会加载数据库中已有的数据

备选方案:手动遍历表单保存

若坚持使用普通formset_factory,可遍历表单集中的每个有效表单,逐个保存:

修改views.py的POST处理逻辑

from .forms import ColumnForm
from django.forms import formset_factory
from django.shortcuts import redirect, render

def design(request):
    ColumnFormSet = formset_factory(ColumnForm, extra=30)
    if request.method == 'POST':
        formset = ColumnFormSet(request.POST)
        if formset.is_valid():
            # 遍历表单,跳过空表单后逐个保存
            for form in formset:
                if form.cleaned_data:
                    form.save()
            return redirect('Home')
    else:
        formset = ColumnFormSet()
    return render(request, 'design.html', {'formset': formset})

额外修正点

  1. 代码中导入语句的From需改为小写from,否则会触发语法错误
  2. 模板design.html中,表单结束标签需改为</form>,而非<form/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:23:14