导入前必须确认的三个配置点:installed_apps中添加'import_export'且置于'django.contrib.admin'之后;模型类继承models.model;admin.py中使用importexportmodeladmin注册。

导入前必须确认的三个配置点
不配好这三项,import_export 会静默失败或报 AttributeError: 'NoneType' object has no attribute 'get'。不是代码写错,是环境没搭对。
-
INSTALLED_APPS里要加'import_export',且必须放在'django.contrib.admin'之后(否则 admin 注册失败) - 模型类必须继承
models.Model,不能是抽象基类或未注册的普通类——Resource类依赖 Django 的元数据系统 - admin.py 中注册时要用
ImportExportModelAdmin,不是admin.ModelAdmin;否则导入按钮根本不会出现
定义 Resource 类时最容易漏掉的字段映射
Excel 列名和模型字段名不一致时,fields 参数不生效,必须用 widgets 或 dehydrate_* 处理,否则空值或类型错误。
- 日期列如 Excel 是
"2024/03/15",模型字段是models.DateField(),得在Resource里显式指定:date = fields.Field(column_name='下单日期', widget=DateWidget(format='%Y/%m/%d')) - 外键字段不能直接写
category = fields.Field(),否则导入时会报DoesNotExist;要改成:category = fields.Field(column_name='分类名称', attribute='category__name'),并配合ForeignKeyWidget - 布尔列 Excel 填的是“是/否”或“√/×”,需用
BooleanWidget并传入coerce_to_bool=True,否则全转成False
处理导入失败的常见错误信息怎么看
页面只显示“导入失败”,但真正线索藏在返回的 result 对象里——必须打印 result.failed_rows 和 result.base_errors 才能定位问题。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
-
result.base_errors是全局错误,比如 Excel 格式损坏、缺少必填字段、字段类型冲突(如把字符串往IntegerField导) -
result.failed_rows每一项含row_number、error和traceback;注意看error里的具体字段名,比如"price: Enter a number."表明第 3 行 price 列有非数字内容 - 如果报
"IntegrityError: duplicate key value violates unique constraint",说明主键或唯一约束冲突,需检查是否重复导入同一份文件,或skip_unchanged=True没启用
性能瓶颈出现在哪?批量导入卡住时先查这个
默认每行都走一次数据库 save(),1000 行就是 1000 次查询。卡顿不是代码慢,是没关事务或没跳过验证。
- 在
Resource类里加use_transactions = True,让整个导入包在一个事务里执行,失败则全部回滚 - 若数据已清洗干净,可设
skip_unchanged = True和report_skipped = False,跳过校验和重复判断 - 避免在
before_import_row()里做耗时操作(如调 API、查缓存),它对每一行都执行;改用before_import()做一次性预处理
Excel 文件本身超过 5MB 或含大量公式/样式时,openpyxl 解析会吃内存,建议前端限制上传大小,并后端用 load_workbook(data_only=True) 跳过公式计算。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










