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

Django ImportExportMixin自定义:外键导入导出显示名称而非ID

Django ImportExportMixin 实现外键字段导出显示名称+导入按名称关联

要实现导出时外键club显示名称、导入时通过俱乐部名称关联的需求,你需要自定义资源类(Resource Class),并使用ForeignKeyWidget指定外键字段的显示和匹配规则,具体实现如下:

  1. 补充导入必要模块
    除原有导入外,需引入资源类和外键部件:

    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
    
  2. 自定义资源类
    创建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')
    
  3. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:42:43