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

Django操作MySQL出现'QuerySet' object has no attribute 'save'报错如何解决

报错根因
  • 你在add视图中使用TL.objects.all()拿到的是查询集(QuerySet)对象,代表TL表的所有记录集合,该对象没有save()方法,只有单个Django模型实例才支持save()操作,这是触发报错的直接原因。
  • 现有逻辑存在功能偏差:你当前要实现的是新增TL记录的需求,不应该直接操作全表查询集,而是要创建新的TL模型实例完成写入。
修正方案

1. 修正views.py中的add函数逻辑

def add(request):
    ad = TL.objects.all()
    if request.method == 'POST':
        # 从POST请求取表单参数
        TL_Name = request.POST.get('TL_Name')
        Proj_name = request.POST.get('Proj_name')
        Deadline = request.POST.get('Deadline')
        # 新建TL模型实例
        new_tl_item = TL()
        # 给实例属性赋值
        new_tl_item.TL_Name = TL_Name
        new_tl_item.Proj_name = Proj_name
        new_tl_item.Deadline = Deadline
        # 若你的TL模型中Proj_Status字段无默认值,此处需补充赋值,示例:
        # new_tl_item.Proj_Status = "待审核"
        # 保存实例到数据库
        new_tl_item.save()
        return redirect("/operations")
    # 修正模板传参:新增场景下b变量不需要传查询集,传None即可避免表单异常
    return render(request, 'operations.html', {"name": ad, 'b': None})

2. 可选优化模板(避免新增表单默认值异常)

你当前operations.html中新增表单的input默认值绑定了{{b.TL_Name}},如果后续有其他场景需要传b变量的话,可以把新增表单的input的value属性清空,改为:

<input type="text" name="TL_Name" value="">
扩展说明

如果你后续需要对批量记录做更新操作,可以使用QuerySet自带的update()方法,不需要调用save(),示例:

# 将所有TL记录的Deadline更新为2024-12-31
TL.objects.all().update(Deadline="2024-12-31")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:27:05