Django ImportExportMixin自定义:外键导入导出显示名称而非ID
Django ImportExportMixin 实现外键字段导出显示名称+导入按名称关联
要实现导出时外键club显示名称、导入时通过俱乐部名称关联的需求,你需要自定义资源类(Resource Class),并使用ForeignKeyWidget指定外键字段的显示和匹配规则,具体实现如下:
补充导入必要模块
除原有导入外,需引入资源类和外键部件:from django.contrib import admin from .models import Player, Club # 明确导入Club模型,避免模糊引用 from import_export.admin import ImportExportMixin from import_export import resources from import_export.widgets import ForeignKeyWidget自定义资源类
创建PlayerResource类,为club字段配置ForeignKeyWidget,指定以name字段作为显示和关联依据:class PlayerResource(resources.ModelResource): club = resources.Field( column_name='club', attribute='club', widget=ForeignKeyWidget(Club, field='name') ) class Meta: model = Player # 显式指定需要导出/导入的字段,也可用'__all__'包含所有字段 fields = ('id', 'name', 'date_birth', 'tshirtnumber', 'club', 'poste')在Admin类中关联资源类
修改PlayerAdmin,将自定义资源类绑定到Admin配置:class PlayerAdmin(ImportExportMixin, admin.ModelAdmin): resource_class = PlayerResource list_display = [field.name for field in Player._meta.fields] admin.site.register(Player, PlayerAdmin)
效果说明
- 导出:生成的文件(JSON/CSV等)中,
club字段会显示对应俱乐部的名称(如"chelsea"),而非ID。 - 导入:导入包含俱乐部名称的文件时,系统会自动匹配
Club模型中name字段对应的实例完成关联;若名称不存在,导入会抛出错误(如需自动创建不存在的俱乐部,可自定义ForeignKeyWidget的clean方法实现)。
内容的提问来源于stack exchange,提问作者Mohamed chouai
相关产品推荐
相关产品推荐

