【问题标题】:how to use django-import-export in DRF?如何在 DRF 中使用 django-import-export?
【发布时间】:2020-11-17 07:35:35
【问题描述】:

安装 import-export 并从管理页面导入的结果 我收到以下错误

错误:

Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\import_export\resources.py", line 639, in import_row
instance, new = self.get_or_init_instance(instance_loader, row)
File "C:\ProgramData\Anaconda3\lib\site-packages\import_export\resources.py", line 334, in get_or_init_instance
instance = self.get_instance(instance_loader, row)
File "C:\ProgramData\Anaconda3\lib\site-packages\import_export\resources.py", line 322, in get_instance
self.fields[f] for f in self.get_import_id_fields()
File "C:\ProgramData\Anaconda3\lib\site-packages\import_export\resources.py", line 322, in <listcomp>
self.fields[f] for f in self.get_import_id_fields()
KeyError: 'id'
from django.contrib import admin
from .models import Country
from import_export.admin import ExportActionModelAdmin, ImportExportMixin, ImportMixin

@admin.register(Country)
class CountryAdmin(ImportExportMixin, admin.ModelAdmin):
    list_display = [  "country_ID", "iso_code", "cname_en"  ]

【问题讨论】:

    标签: django django-rest-framework django-import-export


    【解决方案1】:

    发生的情况是代码失败,因为它试图使用一个字段来查找未在您的资源fields 列表中声明的现有对象。

    在导入期间,django-import-export 将尝试将每个 csv 行与 DB 表中的现有条目进行匹配 - 如果找到它们,那么将有一个 update 操作,而不是 create。这是为了避免创建重复项。

    默认情况下,导入逻辑会查找名为 id 的字段。但是,您似乎没有在 fields 列表中声明此字段,或者您的模型上可能没有“id”字段。

    您或许可以通过以下方式解决此问题:

    fields - ('id',)
    

    这是假设您的模型和数据源中有一个 id 字段。

    docs 对此进行了更详细的介绍,值得通读文档中的导入逻辑以了解发生了什么。此外,设置调试器并单步执行将节省大量时间来理解任何导入问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-07
      • 2015-12-05
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2020-04-22
      • 2015-02-19
      • 2021-11-14
      相关资源
      最近更新 更多