Django 导入导出,更新记录
Django Import Export, update record
我注意到,每当我导入同一组 CSV 时,即使我 skip_unchanged=True,我的记录也会重复。理想情况下,我想要的是,如果再次导入 CSV,它不应导入相同的记录并防止重复,但如果有更改,它应该更新。
我的资源文件中有这个配置
bill_date = fields.Field(
attribute="bill_date", column_name="date", widget=widgets.DateWidget()
)
然后 import_id_fields = ("account_number",)
我也尝试从 skip_row 方法打印原始和实例,但我在日志中得到了这个,
print(f"{getattr(original, "bill_date")} - {getattr(instance, "bill_date")}")
RESULT: None - 2021-06-07
更新
解决了我的问题,我在其中一项测试中错误地添加了 get_instance = False
。
这应该可以正常工作。您需要做的是确保 account_number
包含在 csv 提要中,并且它可以唯一标识您要导入的 table 中的记录。
然后,当导入发生时,逻辑会尝试使用 account_number
加载现有记录,如果存在则更新该行,否则会创建一个新行。
如果此方法不起作用,则已记录 here, and you can debug the get_or_init_instance()
方法。
如果 skip_unchanged
为真,那么逻辑将比较在您的 fields
列表中声明的每个字段,如果存储的数据和导入的数据之间没有变化,则不会更新。
我注意到,每当我导入同一组 CSV 时,即使我 skip_unchanged=True,我的记录也会重复。理想情况下,我想要的是,如果再次导入 CSV,它不应导入相同的记录并防止重复,但如果有更改,它应该更新。
我的资源文件中有这个配置
bill_date = fields.Field(
attribute="bill_date", column_name="date", widget=widgets.DateWidget()
)
然后 import_id_fields = ("account_number",)
我也尝试从 skip_row 方法打印原始和实例,但我在日志中得到了这个,
print(f"{getattr(original, "bill_date")} - {getattr(instance, "bill_date")}")
RESULT: None - 2021-06-07
更新
解决了我的问题,我在其中一项测试中错误地添加了 get_instance = False
。
这应该可以正常工作。您需要做的是确保 account_number
包含在 csv 提要中,并且它可以唯一标识您要导入的 table 中的记录。
然后,当导入发生时,逻辑会尝试使用 account_number
加载现有记录,如果存在则更新该行,否则会创建一个新行。
如果此方法不起作用,则已记录 here, and you can debug the get_or_init_instance()
方法。
如果 skip_unchanged
为真,那么逻辑将比较在您的 fields
列表中声明的每个字段,如果存储的数据和导入的数据之间没有变化,则不会更新。