Django import_export导入报KeyError: 'id',自定义主键CVR_nummer的问题
解决Django import_export导入自定义主键模型时的KeyError: 'id'问题
问题根源在于django-import-export的默认ModelResource会自动尝试映射id字段,但你的Koereskoler模型用CVR_nummer替代了默认的id主键,导入时插件找不到id字段就触发了KeyError。
解决方案:自定义ModelResource指定字段和主键
在admin.py中创建自定义的ModelResource类,明确指定要处理的字段以及模型的主键字段,让插件不再依赖默认的id:
from import_export import resources from import_export.admin import ImportExportModelAdmin from django.contrib import admin from .models import Koereskoler # 自定义资源类 class KoereskolerResource(resources.ModelResource): class Meta: model = Koereskoler # 列出所有需要导入/导出的字段,必须包含主键CVR_nummer fields = ( 'CVR_nummer', 'startdato', 'ophoersdato', 'navn', 'adresse', 'postnr', 'by', 'virksomhedsform', 'hovedbranche', 'telefonnr', 'email', 'reklamebeskyttet', 'pris', 'url', 'owner' ) # 指定模型的主键字段 pk_field = 'CVR_nummer' class KoereskoleAdmin(ImportExportModelAdmin, admin.ModelAdmin): # 关联自定义资源类 resource_class = KoereskolerResource # 你的其他admin配置... admin.site.register(Koereskoler, KoereskoleAdmin)
说明
fields参数明确列出所有需要处理的字段,确保插件只关注这些字段,不会去寻找不存在的id。pk_field指定模型的主键为CVR_nummer,让插件知道用这个字段来识别唯一记录,替代默认的id。- 修改后,导出的文件会保持原有字段结构,导入时插件会正确匹配
CVR_nummer作为主键,不再触发id相关错误。
注意:如果导入文件包含
owner字段,需确保对应的User记录已存在于数据库中(比如你的默认配置是id=1的用户),否则会触发外键关联错误。
内容的提问来源于stack exchange,提问作者Bastian Johannesen
相关产品推荐
相关产品推荐

