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

如何在django-import-export中用ProductModel标题替代ID导入数据?

用django-import-export通过外键标题导入数据的解决方案

要实现用ProductModel的标题替代ID导入Item数据,只需自定义ModelResource并使用ForeignKeyWidget指定匹配字段即可,步骤如下:

1. 定义自定义Resource类

先导入所需模块,然后为Item编写Resource类,重写外键字段的处理逻辑:

from import_export import resources, fields
from import_export.widgets import ForeignKeyWidget
from .models import Item, ProductModel

class ItemResource(resources.ModelResource):
    # 重写model字段,指定通过ProductModel的title匹配
    model = fields.Field(
        column_name='model_title',  # 对应CSV里的列名,可根据你的CSV调整
        attribute='model',
        widget=ForeignKeyWidget(ProductModel, field='title')
    )

    class Meta:
        model = Item
        fields = ('title', 'model',)  # 要导入的字段列表

2. 在Admin中注册Resource

修改admin.py,将自定义的Resource关联到Item的Admin类:

from django.contrib import admin
from import_export.admin import ImportExportModelAdmin
from .models import Item
from .resources import ItemResource

class ItemAdmin(ImportExportModelAdmin):
    resource_class = ItemResource

admin.site.register(Item, ItemAdmin)

3. 注意事项

  • 确保标题唯一:为避免导入时匹配到多个ProductModel实例,建议给ProductModel的title字段添加唯一约束:
    class ProductModel(models.Model):
        title = models.CharField(max_length=100, unique=True)
        desc = models.TextField()
    
  • CSV列名对应:你的CSV文件中,对应外键的列名要和column_name设置的一致(比如上面的model_title),列值填写ProductModel的标题即可。

内容的提问来源于stack exchange,提问作者Sesshōmaru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:35:27