Django Import-Export导入CSV重复且skip_unchanged不生效问题
Django Import Export 重复导入问题修复方案
问题现象
配置skip_unchanged=True后,重复导入同一份CSV文件依然会生成重复记录,预期效果为相同记录直接跳过、有变更的记录执行更新。
原有配置
Resource文件核心配置如下:
bill_date = fields.Field( attribute="bill_date", column_name="date", widget=widgets.DateWidget() ) import_id_fields = ("account_number",)
排查步骤
在skip_row方法中添加日志打印新旧实例的bill_date属性:
print(f"{getattr(original, 'bill_date')} - {getattr(instance, 'bill_date')}")
得到输出:None - 2021-06-07,说明导入流程没有获取到数据库中已存在的旧实例。
根因与解决方法
问题根源是测试时误添加了get_instance = False配置:
该参数控制导入流程是否会根据import_id_fields查询数据库获取已存在的实例,设为False后,系统会默认所有导入行都是新增数据,无法触发新旧字段对比逻辑,自然也不会执行跳过、更新操作,最终产生重复记录。
直接删除get_instance = False配置即可恢复正常逻辑,系统会自动匹配已有记录,配合skip_unchanged=True实现无变更跳过、有变更更新的效果。
内容的提问来源于stack exchange,提问作者n0minal
相关产品推荐
相关产品推荐

