使用django-import-export导入含外键数据时遇空值错误求助
解决django-import-export导入外键数据时Brand_id为空的问题
问题出在导入阶段,默认的字段处理逻辑无法通过Brand__title自动匹配到对应的Brand实例,导致外键字段Brand_id未被赋值,触发非空约束错误。
修复步骤:
导入必要工具类
from import_export import resources, fields from import_export.widgets import ForeignKeyWidget from .models import Model, Brand # 替换为你的实际模型类修改资源类,显式定义外键匹配逻辑
class ModelResource(resources.ModelResource): # 用ForeignKeyWidget指定通过title字段匹配Brand实例 Brand__title = fields.Field( column_name='Brand__title', attribute='Brand', widget=ForeignKeyWidget(Brand, field='title') ) class Meta: model = Model fields = ('id','title','Model_code','Chipset','chipset_description','image','Brand__title','Cat')
关键说明:
- 导出时
Brand__title能正常读取外键的title属性,但导入时必须明确告诉django-import-export:通过传入的Brand__title值,去Brand模型中查找对应title的实例,再将该实例赋值给Model的Brand外键字段。 - 如果导入的品牌名称在数据库中不存在,会抛出
DoesNotExist异常。若需要自动创建不存在的品牌,可给ForeignKeyWidget添加create_missing=True参数:widget=ForeignKeyWidget(Brand, field='title', create_missing=True)
内容的提问来源于stack exchange,提问作者Malik Naveed
相关产品推荐
相关产品推荐

