【问题标题】:Django Import Export, update recordDjango Import Export,更新记录
【发布时间】:2021-09-07 14:33:30
【问题描述】:

我注意到,每当我导入同一组 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

【问题讨论】:

    标签: django-import-export


    【解决方案1】:

    这应该可以正常工作。您需要做的是确保 account_number 包含在 csv 提要中,并且它可以唯一标识您要导入的表中的记录。

    然后,当导入发生时,逻辑尝试使用account_number 加载现有记录,如果存在则更新该行,否则创建一个新行。

    这已记录在 here 中,如果 get_or_init_instance() 方法不起作用,您可以调试它。

    如果skip_unchanged 为真,则逻辑将比较fields 列表中声明的每个字段,并且如果存储数据和导入数据之间没有变化,则不会更新。

    【讨论】:

    • 它需要有一个唯一的约束吗?也可以使用 FK 作为 import_id_fields 吗?我的模型结构是我有一张包含客户信息的账单,然后在我的 before_import_row 上,我对客户信息执行 get_or_create。
    • 另外我没有得到想要的行为,我什至清除了数据以确保在第一次导入时创建了帐号,但在第二次导入时我仍然看到重复记录
    • 我很困惑为什么这对我不起作用。也许是因为我有 before_import_row 我在其中插入列到我的行?
    • 最好的办法(如果你还没有的话)是设置一个调试器(我使用 PyCharm)并逐步完成——你将能够准确地看到发生了什么。抱歉,我无法提供更多帮助。
    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    相关资源
    最近更新 更多