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

使用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

可行解决方法

  1. 显式声明主键字段
    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']
    
  2. 验证Admin继承来源
    确认ImportExportModelAdmin是从import_export.admin正确导入:

    from import_export.admin import ImportExportModelAdmin
    
  3. 清理缓存并重启服务
    Django缓存可能残留旧模型元数据,执行以下命令后重启服务:

    python manage.py clearcache
    python manage.py runserver
    
  4. 检查CSV文件格式
    确保CSV用UTF-8编码,无隐藏特殊字符,可通过纯文本编辑器重新保存后再尝试导入。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:17:38