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

Django导出模型数据到Excel时遇'ModelBase' object is not iterable错误

解决Django导出Excel时'ModelBase' object is not iterable错误

嘿,我一眼就瞅到问题所在了!你遇到的'ModelBase' object is not iterable错误,根源出在最后写入Excel的循环里——你居然直接去遍历Task模型类了,而不是你之前已经获取到的数据集合!

错误根源分析

你原来的这段循环代码完全写错了遍历对象:

for Name,Image1,Image2,Date in (Task):

Task是Django的模型类(也就是ModelBase类型的对象),它本身不是可迭代的数据集合,自然会抛出“不可迭代”的错误。你应该遍历的是之前获取的查询集plans,或者你整理好的列表b。

修正方案一:直接遍历查询集plans

这是最直接的方式,用你已经从数据库取出的plans查询集来遍历写入:

# 先清空原来的错误循环,替换成下面的代码
row = 1
col = 0

# 先写入表头(可选,让Excel结构更清晰)
worksheet.write(0, col, "任务名称")
worksheet.write(0, col+1, "图片1链接")
worksheet.write(0, col+2, "图片2链接")
worksheet.write(0, col+3, "日期")

for plan in plans:
    # 写入名称
    worksheet.write(row, col, plan.Name)
    # 处理图片字段为空的情况,避免AttributeError
    worksheet.write(row, col+1, plan.Image1.url if plan.Image1 else "无图片")
    worksheet.write(row, col+2, plan.Image2.url if plan.Image2 else "无图片")
    # 日期字段转成字符串格式,避免Excel解析异常
    worksheet.write(row, col+3, plan.Date.strftime("%Y-%m-%d") if plan.Date else "无日期")
    row += 1

修正方案二:遍历你整理好的列表b

如果你已经把数据整理到b列表里了,也可以直接遍历这个列表:

row = 1
col = 0

# 写入表头
worksheet.write(0, col, "任务名称")
worksheet.write(0, col+1, "图片1链接")
worksheet.write(0, col+2, "图片2链接")
worksheet.write(0, col+3, "日期")

for item in b:
    worksheet.write(row, col, item["Name"])
    worksheet.write(row, col+1, item["Image1"] if item["Image1"] else "无图片")
    worksheet.write(row, col+2, item["Image2"] if item["Image2"] else "无图片")
    worksheet.write(row, col+3, item["Date"].strftime("%Y-%m-%d") if item["Date"] else "无日期")
    row += 1

额外提醒

  1. 空值处理:你的Image1、Image2、Date字段都允许为空,一定要做判断后再访问属性,不然会触发AttributeError。
  2. 返回值问题:你最后return Response({'success':b,"sheet":worksheet})里的worksheet是xlsxwriter的对象,没法直接序列化返回给前端,建议只返回成功状态和数据列表b,或者返回生成的Excel文件的下载路径。
  3. 文件保存:确保你的Django项目有生成data.xlsx的权限,或者指定一个绝对路径来保存文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:47:28