资源¶
资源¶
- 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)¶
重写以添加额外逻辑。默认情况下不执行任何操作。
- 参数:
dataset -- 一个
tablib.Dataset。result -- A
import_export.results.Result实现,包含导入的摘要。**kwargs -- 参见
import_row()
- 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_transactions和rollback_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 传递动态值以增强导入/导出功能。
- 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_bulk为True时使用。
- 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,则会将每个现有实例与要导入的实例进行比较,如果未检测到更改,则该行将被记录为已跳过,并且不会进行数据库更新。启用此选项的优势是:
避免不必要的数据库操作,从而可以提升大型数据集的性能。
跳过的记录会记录在每个:class:`~import_export.results.RowResult`中。
跳过的记录在:ref:`导入确认页面<import-process>`中清晰可见。
为了使默认的
skip_unchanged逻辑生效,skip_diff也必须设置为 ``False``(这是默认值):默认值为
False。
- store_instance = False¶
如果为 True,行实例将存储在每个
RowResult中。启用此参数将增加导入期间的内存使用量,在导入大型数据集时应予以考虑。此值在通过Admin UI导入时将始终设置为``True``。这是为了可以创建适当的``LogEntry``实例。
- 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类