使用django-import-export导入CSV时遇KeyError: 'id'问题
Django Admin导入CSV更新SQLite数据时触发KeyError: 'id'
错误信息
上传的每条记录都会触发如下错误:
Line number: 1 - 'id' Traceback (most recent call last): ... import_id_fields = [self.fields[f] for f in self.get_import_id_fields()] KeyError: 'id'
模型定义(models.py)
已自定义主键external_id:
class HCPMaster(models.Model): external_id = models.CharField(max_length=200, primary_key=True) bi_external_id = models.CharField(max_length=200) name = models.CharField(max_length=200) ...
Resource配置(resources.py)
已指定import_id_fields为自定义主键:
class HCPMasterResource(resources.ModelResource): class Meta: model = HCPMaster import_id_fields = ['external_id']
Admin配置(admin.py)
class HCPMasterAdmin(ImportExportModelAdmin): resources_class = HCPMasterResource admin.site.register(HCPMaster, HCPMasterAdmin)
上传的CSV内容
列名与模型字段完全匹配:
external_id,bi_external_id,name,primary_parent_name,parent_external_id,parent_parent_external_id,personal_title,administrative_title,license,network_external_id,status,verified_time,updated_time CNC1562173,CN1183335,John,Hospital A,Hospital A,CNHABCD,Doctor,Agent,,9.36678E+17,Active,44851,45231 CNC1531568,CN1183339,Mary,Hospital B,Hospital B,CNHABCE,Doctor,Agent,,9.37537E+17,Active,44799,45231
已尝试的无效方案
- 将
import_id_fields指定为实际主键external_id - 在ModelResource的Meta类中添加
exclude = ['id'] - 在ModelResource的Meta类中指定
fields,列出CSV所有字段 - 在CSV中手动添加
id列并留空
环境版本
Django 4.2.7 django-import-export 3.3.3
可行解决方法
显式声明主键字段
django-import-export可能默认尝试加载id字段,即使模型未定义,需在Resource中显式定义external_id:from import_export import fields, widgets class HCPMasterResource(resources.ModelResource): external_id = fields.Field( column_name='external_id', attribute='external_id', widget=widgets.CharFieldWidget() ) class Meta: model = HCPMaster import_id_fields = ['external_id'] exclude = ['id']验证Admin继承来源
确认ImportExportModelAdmin是从import_export.admin正确导入:from import_export.admin import ImportExportModelAdmin清理缓存并重启服务
Django缓存可能残留旧模型元数据,执行以下命令后重启服务:python manage.py clearcache python manage.py runserver检查CSV文件格式
确保CSV用UTF-8编码,无隐藏特殊字符,可通过纯文本编辑器重新保存后再尝试导入。
内容的提问来源于stack exchange,提问作者kadakyo
相关产品推荐
相关产品推荐

