Django import-export导入含外键约束数据时外键校验失败如何解决
问题根源
- 你在
admin.py中重新定义了一个空白的JobResource类,没有使用resource.py中已经配置了外键匹配规则的自定义Resource,导致导入时外键字段无法正确匹配Ap表记录 - Job模型定义存在语法瑕疵:
dcma和due_date字段定义末尾多了多余的逗号,可能引发异常 - CSV字段名/值格式与Resource配置不匹配
修复步骤
修正admin.py配置
删除admin.py中重复定义的JobResource,直接引入resource.py里的自定义配置,修改后代码如下:
from .models import Job from .resource import JobResource from import_export.admin import ImportExportModelAdmin from django.contrib import admin class JobAdmin(ImportExportModelAdmin): resource_class = JobResource admin.site.register(Job, JobAdmin)
修正models.py语法错误
删除Job模型两个字段末尾的多余逗号:
class Job(models.Model): # 其他字段保持不变 dcma = models.BooleanField(default=False) # 删掉末尾多余逗号 due_date = models.DateField(blank=True) # 删掉末尾多余逗号 # 其他字段保持不变
调整CSV填写规范
你自定义的ForeignkeyRequiredWidget指定了用Ap表的id字段匹配外键,所以CSV的aplink列直接填写对应已存在的Ap记录的id值即可,比如你库中Ap的id为1就填1,不需要填写line_num等其他字段值。
如果需要用line_num字段匹配外键,可以将widget的第二个参数改为line_num:
aplink = fields.Field(column_name='aplink', attribute='aplink', widget=ForeignkeyRequiredWidget(Ap,'line_num'), saves_null_values=False)
验证导入
建议先通过Admin导出一条已存在的Job记录作为CSV模板,对照模板的字段名、值格式填写待导入数据,避免出现格式不匹配问题。
内容的提问来源于stack exchange,提问作者Jesse Brown
相关产品推荐
相关产品推荐

