资源

资源

class import_export.resources.Resource(**kwargs)

资源定义了对象如何映射到其导入和导出表示形式,并处理数据的导入和导出。

kwargs:

一个可选的 kwargs 字典。子类可以使用 kwargs 传递动态值以增强导入/导出功能。

after_delete_instance(instance, row, **kwargs)

重写以添加额外逻辑。默认情况下不执行任何操作。

参数:
  • instance -- 新的或现有的模型实例。

  • row -- 包含要导入行的键/值数据的 dict

  • **kwargs -- 参见 import_row()

after_export(queryset, dataset, **kwargs)

重写以添加额外逻辑。默认情况下不执行任何操作。

参数:
  • queryset -- 要导出的查询集。

  • dataset -- 一个 tablib.Dataset

  • **kwargs -- 可能与导出关联的元数据。

after_import(dataset, result, **kwargs)

重写以添加额外逻辑。默认情况下不执行任何操作。

参数:
after_import_row(row, row_result, **kwargs)

重写以添加额外逻辑。默认情况下不执行任何操作。

参数:
  • row -- 包含要导入行的键/值数据的 dict

  • row_result -- 一个 RowResult 实例。引用持久化的 instance 作为属性。

  • **kwargs -- 参见 import_row()

after_init_instance(instance, new, row, **kwargs)

重写以添加额外逻辑。默认情况下不执行任何操作。

参数:
  • instance -- 新的或现有的模型实例。

  • new -- 一个布尔标志,指示实例是新的还是现有的。

  • row -- 包含要导入行的键/值数据的 dict

  • **kwargs -- 参见 import_row()

after_save_instance(instance, row, **kwargs)

重写以添加额外逻辑。默认情况下不执行任何操作。

参数:
  • instance -- 新的或现有的模型实例。

  • row -- 包含要导入行的键/值数据的 dict

  • **kwargs -- 参见 import_row()

before_delete_instance(instance, row, **kwargs)

重写以添加额外逻辑。默认情况下不执行任何操作。

参数:
  • instance -- 新的或现有的模型实例。

  • row -- 包含要导入行的键/值数据的 dict

  • **kwargs -- 参见 import_row()

before_export(queryset, **kwargs)

重写以添加额外逻辑。默认情况下不执行任何操作。

参数:
  • queryset -- 要导出的查询集。

  • **kwargs -- 可能与导出关联的元数据。

before_import(dataset, **kwargs)

重写以添加额外逻辑。默认情况下不执行任何操作。

参数:
  • dataset -- 一个 tablib.Dataset

  • **kwargs -- 参见 import_row()

before_import_row(row, **kwargs)

重写以添加额外逻辑。默认情况下不执行任何操作。

参数:
  • row -- 包含要导入行的键/值数据的 dict

  • **kwargs -- 参见 import_row()

before_save_instance(instance, row, **kwargs)

重写以添加额外逻辑。默认情况下不执行任何操作。

参数:
  • instance -- 新的或现有的模型实例。

  • row -- 包含要导入行的键/值数据的 dict

  • **kwargs -- 参见 import_row()

bulk_create(using_transactions, dry_run, raise_errors, batch_size=None, result=None)

通过调用 bulk_create 创建对象。

bulk_delete(using_transactions, dry_run, raise_errors, result=None)

通过筛选要删除的实例列表来删除对象,然后在整个查询集上调用``delete()``。

bulk_update(using_transactions, dry_run, raise_errors, batch_size=None, result=None)

通过调用 bulk_update 更新对象。

delete_instance(instance, row, **kwargs)

只要未设置 dry_run 就调用 instance.delete()。如果 use_bulk 则将实例追加到列表中进行批量导入。

参数:
  • instance -- 新的或现有的模型实例。

  • row -- 包含要导入行的键/值数据的 dict

  • **kwargs -- 参见 import_row()

do_instance_save(instance, is_create)

一种专门为实例保存操作提供单一可覆盖钩子的方法。例如,可以覆盖此方法以实现update_or_create()。

参数:
  • instance -- 要保存的模型实例。

  • is_create -- 一个布尔标志,用于指示这是要创建的新对象,还是要更新的现有对象。

export(queryset=None, **kwargs)

导出一个资源。

参数:

queryset -- 要导出的查询集(可选)。

返回:

一个 tablib.Dataset

filter_export(queryset, **kwargs)

覆盖以过滤导出查询集。

参数:
  • queryset -- 要导出的查询集。

  • **kwargs -- 可能与导出关联的元数据。

返回:

过滤后的查询集。

for_delete(row, instance)

如果 row 导入应删除实例,则返回 True

默认实现返回 False。重写此方法以处理删除。

参数:
  • row -- 包含要导入行的键/值数据的 dict

  • instance -- 新的或现有的模型实例。

get_bulk_update_fields()

返回要在调用 bulk_update() 时包含的字段。import_id_fields 被移除,因为 id 字段不能提供给 bulk_update()。

classmethod get_diff_class()

返回用于显示导入实例差异的类。

get_diff_headers()

差异表示头信息。

classmethod get_error_result_class()

返回用于存储导入错误的类。

get_field_name(field)

返回给定字段的字段名称。

get_instance(instance_loader, row)

调用 InstanceLoader

get_or_init_instance(instance_loader, row)

获取已存在的实例或初始化一个新实例。

classmethod get_result_class()

返回用于存储导入结果的类。

classmethod get_row_result_class()

返回用于存储行导入结果的类。

import_data(dataset, dry_run=False, raise_errors=False, use_transactions=None, collect_failed_rows=False, rollback_on_validation_errors=False, **kwargs)

tablib.Dataset 导入数据。完整导入流程的详细说明请参阅 导入工作流

参数:
  • dataset -- 一个 tablib.Dataset

  • raise_errors -- 是否应将错误打印给最终用户或正常引发。

  • use_transactions -- 如果 True 导入过程将在事务内处理。

  • collect_failed_rows -- 如果 True,导入过程将创建一个包含失败行和错误的新数据集对象。这对于调试目的可能有用,但对于较大的数据集会导致更高的内存使用量。请参阅 failed_dataset

  • rollback_on_validation_errors -- 如果 use_transactionsrollback_on_validation_errors 都设置为 True,在出现 ValidationError 时导入过程将被回滚。

  • dry_run -- 如果设置了 dry_run 或发生错误,如果正在使用事务,它将被回滚。

  • **kwargs -- 可能与导入关联的元数据。

import_field(field, instance, row, is_m2m=False, **kwargs)

处理字段数据的持久化。

参数:
  • field -- A import_export.fields.Field 实例。

  • instance -- 新的或现有的模型实例。

  • row -- 包含要导入行的键/值数据的 dict

  • is_m2m -- 一个布尔值,指示这是否是一个多对多字段。

  • **kwargs -- 参见 import_row()

import_instance(instance, row, **kwargs)

遍历此Resource中的每个字段并调用:meth:~import_export.resources.Resource.import_field。如果``import_field()``导致一个或多个字段引发``ValueError``,这些错误将被捕获并重新作为单个多字段ValidationError抛出。

参数:
  • instance -- 新的或现有的模型实例。

  • row -- 包含要导入行的键/值数据的 dict

  • **kwargs -- 参见 import_row()

import_row(row, instance_loader, **kwargs)

tablib.Dataset 导入数据。完整导入流程的详细说明请参阅 导入工作流

参数:
  • row -- 要导入的“行”的 dict。一行是数据字段的 dict,因此可以是 csv 行、JSON 对象、YAML 对象等。

  • instance_loader -- 用于加载与行关联的模型实例的实例加载器(如果有的话)。

  • **kwargs -- 见下文。

关键字参数:
  • dry_run (boolean) -- 值为 True 表示不应保留任何数据。

  • use_transactions (boolean) -- 值为 True 时表示事务将被回滚。

  • row_number (int) -- 正在导入的行的索引。

init_instance(row=None)

初始化一个对象。在 import_export.resources.ModelResource.init_instance() 中实现。

save_instance(instance, is_create, row, **kwargs)

负责将对象保存到数据库。

如果启用了 use_bulk,可以批量创建对象。

参数:
  • instance -- 要持久化的对象的实例。

  • is_create -- 一个布尔标志,用于指示这是要创建的新对象,还是要更新的现有对象。

  • row -- 表示导入行的字典。

  • **kwargs -- 参见 import_row()

save_m2m(instance, row, **kwargs)

保存m2m字段。

模型实例需要有一个主键值才能使用多对多关系。

参数:
  • instance -- 新的或现有的模型实例。

  • row -- 包含要导入行的键/值数据的 dict

  • **kwargs -- 参见 import_row()

skip_row(instance, original, row, import_validation_errors=None)

如果应跳过 row 导入,则返回 True

默认实现返回 False 除非 skip_unchanged == True 且 skip_diff == False。

如果 skip_diff 为 True,则无法进行比较,因为 original 将为 None。

当未指定时,skip_diff 和 skip_unchanged 都默认为 False,且行永远不会被跳过。

默认情况下,如果在导入过程中检测到验证错误,不会跳过行。您可以通过重写此方法来更改此行为并选择忽略验证错误。

重写此方法以处理跳过满足特定条件的行。

使用 super 如果你想在覆盖时保留默认处理

class YourResource(ModelResource):
    def skip_row(self, instance, original,
                 row, import_validation_errors=None):
        # Add code here
        return super().skip_row(instance, original, row,
                                import_validation_errors=import_validation_errors)
参数:
  • instance -- 一个新的或更新的模型实例。

  • original -- 原始持久化模型实例

  • row -- 包含要导入行的键/值数据的 dict

  • import_validation_errors -- 一个包含任何已识别验证错误的键/值数据的 dict

validate_instance(instance, import_validation_errors=None, validate_unique=True)

import_instance() 引发的任何验证错误,与实例的 full_clean() 方法引发的验证错误合并。然后将合并后的错误作为单个多字段 ValidationError 重新抛出。

如果 clean_model_instances 选项为 False,则不会调用实例的 full_clean() 方法,并且只会重新抛出由 import_instance() 引发的错误。

模型资源

class import_export.resources.ModelResource(**kwargs)

ModelResource 是用于处理 Django 模型的 Resource 子类。

kwargs:

一个可选的 kwargs 字典。子类可以使用 kwargs 传递动态值以增强导入/导出功能。

DEFAULT_RESOURCE_FIELD

Field 的别名

after_import(dataset, result, **kwargs)

导入新对象后重置SQL序列

classmethod field_from_django_field(field_name, django_field, readonly)

返回给定Django模型字段的Resource Field实例。

classmethod get_fk_widget(field)

为fk和o2o字段准备widget

classmethod get_m2m_widget(field)

为m2m字段准备小部件

get_queryset()

返回此模型所有对象的查询集。如需限制返回的查询集,请重写此方法。

init_instance(row=None)

初始化一个新的Django模型。

classmethod widget_from_django_field(f, default=<class 'import_export.widgets.Widget'>)

返回可能与每种Django类型关联的小部件。

包括Postgres Array字段的映射。如果未安装psycopg2,我们会捕获错误并继续处理该字段。

classmethod widget_kwargs_for_field(field_name, django_field)

返回给定 field_name 的 widget kwargs。

ResourceOptions(Meta)

class import_export.options.ResourceOptions

内部Meta类允许对Resource的行为进行类级别的配置。以下选项可用:

batch_size = 1000

batch_size 参数控制单次查询中创建多少对象。默认情况下,每次批量创建1000个对象。参见 bulk_create()。该参数仅在 use_bulkTrue 时使用。

chunk_size = None

控制 Queryset.iterator 的 chunk_size 参数,或者如果使用了 prefetch_related,则控制 Paginator 的 per_page 属性。

clean_model_instances = False

控制是否在导入过程中调用 full_clean 以识别每个(未跳过)行的潜在验证错误。默认值为 False

exclude = None

控制Resource不应包含哪些内省字段。字段的黑名单。

export_order = None

控制列的导出顺序。

fields = None

控制Resource应包含哪些内省字段。字段的白名单。

force_init_instance = False

如果为``True``,此参数将阻止导入时检查数据库中是否已存在实例。若您的导入数据集保证只包含新实例,启用此参数可提升性能。

import_id_fields = ['id']

控制哪些对象字段将用于识别现有实例。

import_order = None

控制列的导入顺序。

instance_loader_class = None

控制哪个类实例将负责加载现有对象。

model = None

Django Model 类或完整的应用程序标签字符串。用于内省可用字段。

report_skipped = True

控制是否在结果报告中显示跳过的行。默认值为 True

skip_diff = False

控制实例在导入后是否应进行差异比较。

默认情况下,实例在插入、更新或删除前会被复制。每行处理完成后,实例的副本会与原始版本进行差异比对,并将结果存储在每个:class:`~import_export.results.RowResult`中。如果不需要差异比对,则将此值设为``True``以禁用差异操作可提升性能,因为系统会跳过每行的复制和比较操作。

如果启用,则 skip_row() 检查不会执行,因为 'skip' 逻辑需要比较存储和导入的行版本。

如果启用,则也不会生成HTML行报告,这意味着将忽略 skip_html_diff 值。

默认值为 False

skip_html_diff = False

控制是否在每行后生成HTML报告。默认情况下,存储副本与导入实例之间的差异会以HTML形式生成,并存储在每个:class:`~import_export.results.RowResult`中。

HTML报告用于在管理站点中展示`:ref:`导入确认页面<import-process>`的变更,因此当该值为``True``时,变更将不会显示在确认屏幕上。

如果不需要HTML报告,那么将此值设置为``True``可提高性能,因为会跳过每行的HTML生成。这在导入大型数据集时是一种有用的优化。

默认值为 False

skip_unchanged = False

控制导入是否应跳过未更改的记录。如果为 True,则会将每个现有实例与要导入的实例进行比较,如果未检测到更改,则该行将被记录为已跳过,并且不会进行数据库更新。

启用此选项的优势是:

  1. 避免不必要的数据库操作,从而可以提升大型数据集的性能。

  2. 跳过的记录会记录在每个:class:`~import_export.results.RowResult`中。

  3. 跳过的记录在:ref:`导入确认页面<import-process>`中清晰可见。

为了使默认的 skip_unchanged 逻辑生效,skip_diff 也必须设置为 ``False``(这是默认值):

默认值为 False

store_instance = False

如果为 True,行实例将存储在每个 RowResult 中。启用此参数将增加导入期间的内存使用量,在导入大型数据集时应予以考虑。

此值在通过Admin UI导入时将始终设置为``True``。这是为了可以创建适当的``LogEntry``实例。

store_row_values = False

如果为 True,每行的原始数据将被存储在每个 RowResult 中。启用此参数将增加导入期间的内存使用量,在导入大型数据集时应予以考虑。

use_bulk = False

控制是否应以批量方式执行导入操作。默认情况下,数据集中每行都会调用对象的save()方法。启用批量操作时,对象将使用批量操作进行保存。

use_natural_foreign_keys = False

如果为 True,该值将被传递给所有模型支持自然外键的外键小部件字段。即模型具有 natural_key 函数且管理器具有 get_by_natural_key() 函数。

use_transactions = None

控制导入是否应使用数据库事务。默认值为``None``,意味着将评估``settings.IMPORT_EXPORT_USE_TRANSACTIONS``。

using_db = None

用于数据库事务的DB连接名称。如果未提供,将评估``router.db_for_write(model)``,如果缺失,则使用``DEFAULT_DB_ALIAS``常量("default")。

widgets = None

本词典定义了字段的widget kwargs。

modelresource_factory

resources.modelresource_factory(resource_class=<class 'import_export.resources.ModelResource'>, meta_options=None, custom_fields=None, dehydrate_methods=None)

为给定Django模型创建``ModelResource``类的工厂。此工厂函数动态创建``ModelResource``类,支持自定义字段、方法。

参数:
  • model -- Django 模型类

  • resource_class -- 基础资源类(默认:ModelResource)

  • meta_options -- 元选项字典

  • custom_fields -- 字典将字段名映射到Field对象

  • dehydrate_methods -- 字典映射字段名到脱水方法(Callable)

返回:

ModelResource类