发布说明¶
v4.2¶
通过 admin action 导出时,现在会在
get_queryset()上过滤查询集,而不是模型的默认查询集。这不会对现有实现产生影响。此更改还使
get_valid_export_item_pks()过时,因为可以使用 ModelAdmin 的get_export_queryset()或 ModelAdmin 的 get_queryset 替代。get_valid_export_item_pks()方法现已弃用。参见 PR 1890。
移除了内部方法
_get_enabled_export_fields(),改为将选中的字段列表作为新参数传递给export_resource()和get_export_headers()。当“Resource”表单仅有一个选项时隐藏它,以避免界面中出现可能令人困惑的文本,例如“Resource: BookResource”。要撤销此更改,请使用一个表单子类,将该字段的小部件更改为
django.forms.Select。 参见 1908tablib 已从 v3.5.0 升级至 3.6.1。此次升级移除了 tablib 对 MarkupPy 的依赖,转而使用
ElementTree。如果您导出为 HTML,此变更可能会影响输出格式,特别是当您已对文本中的 HTML 字符进行转义时。见 issue 1627。
重大变更¶
此版本修复了在v4中引入的回归问题。从v4.2开始,数字、布尔值和日期/时间控件以原生值形式写入电子表格格式(ODS、XLS、XLSX)。这是v3中的默认行为。参见:ref:文档<modify_render_return_type>。
这意味着传递给
Widget的coerce_to_string值在从 Admin 界面导出为电子表格格式时现在会被忽略。如果你子类化了
Widget、Field或Resource,那么你可能需要调整代码以包含**kwargs参数,如下所示:
上一个 |
新 |
|---|---|
|
|
|
|
|
|
|
|
v4.1¶
Resource.get_fields() 方法不再在包内调用,已被弃用。如果您已覆盖此方法,则应将其移除。
v4.0¶
v4 对导入-导出功能进行了重大更新。我们借此机会引入了一些破坏性变更,以修复一些长期存在的问题。
参考 更新日志 获取更多信息。请确保在将 v4 部署到生产环境之前进行全面测试。
本指南描述了主要变更以及如何升级。
安装¶
我们修改了安装方法以支持可选依赖项。这意味着在安装import-export时您必须显式声明依赖项。
如果不确定,或希望保留v4之前的行为,请确保按以下方式安装import-export(无论是在requirements文件中还是安装过程中):
django-import-export[all]
功能变更¶
CharWidget¶
构造函数参数在实例化过程中根据底层Django db CharField的属性动态设置。如果db字段的`blank <https://docs.djangoproject.com/en/stable/ref/models/fields/#blank>`_设置为True,则传入的空字符串或null值将存储为空字符串。参见 CharWidget。
clean() 现在默认返回字符串类型。v3 版本引入的 coerce_to_string 选项在此方法中不再使用。
验证错误消息¶
以下小部件已更新验证错误消息:
导出格式¶
我们标准化了从:meth:`~import_export.widgets.Widget.render`返回的导出输出。
在v4之前,从``render()``返回的导出格式因Widget实现而异。在v4中,返回值默认渲染为字符串(适用时),``None``值返回为空字符串。Widget参数可以修改此行为。
这会导致导出到Excel时发生变化。在v3中,某些字段(如数值)以其原生类型呈现。在v4中,所有字段现在都以字符串形式呈现。要在导出到Excel时保留v3的行为,请将``coerce_to_string``参数设置为``False``。参见:ref:documentation<modify_render_return_type>。
导出字段顺序¶
导出字段的排序规则已标准化。参见 文档。
错误输出¶
如果 import_data() 的 raise_errors 参数为 True,则会抛出一个 ImportError 实例。该异常封装了底层异常。
查看 此PR。
检查 import_id_fields¶
在v4版本之前,我们遇到许多问题,用户因数据集中未声明``import_id_fields``导致导入失败而感到困惑。我们在v4中添加了功能来检查这一点,并抛出更清晰的错误信息。
在某些用例中,要求 import_id_fields 不在数据集中,而是动态生成。如果这影响了您的实现,请从文档 这里 开始。
弃用¶
传递给
render()的obj参数已被弃用。render()方法不应需要引用模型实例。从export()调用render()的操作已被移除。使用
ExportViewFormMixin已被弃用。参见 此问题。参见 重命名的方法。
在Admin UI中,``resource_class``的声明被``resource_classes``取代:
class BookAdmin(ImportExportModelAdmin): # remove this line # resource_class = BookResource # replace with this resource_classes = [BookResource]
管理界面¶
日志条目¶
LogEntry 实例在导入过程中为创建、更新和删除操作而创建。存储 LogEntry 的功能在 v4 中已更改,以解决 Django 5 中的弃用问题。为了正确实现此功能,删除的实例现在始终被复制并保留在每个 RowResult 中,以便它们可以在每个 LogEntry 中被记录。
这仅发生在从Admin UI发起的删除操作中。
导出操作¶
导出操作已更新以包含导出工作流。在v4之前,可以选择使用导出管理员操作来导出所选项目。然而这意味着跳过了导出工作流,并且无法选择导出资源。此问题已在v4中修复,因此现在通过Admin UI操作导出时会显示导出工作流。更多信息请参阅 导出文档。
导出选定字段¶
导出 '确认' 页面 现在包含可选择的导出字段。如果您希望恢复到之前(v3版本)的导出确认界面,请在您的 Admin 类子类中添加 export_form_class 声明,例如:
class BookAdmin(ImportExportModelAdmin):
export_form_class = ExportForm
成功消息¶
成功导入时显示的成功消息已更新,包含“deleted”和“skipped”行的数量。参见 this PR。
导入错误消息¶
导入错误的默认错误消息已修改以简化格式。错误消息现在默认仅包含错误消息。行数和回溯信息不再显示。
可以通过在Admin类定义上设置`:attr:`~import_export.admin.ImportMixin.import_error_display`来恢复原始格式。例如:
class BookAdmin(ImportExportModelAdmin):
import_error_display = ("message", "row", "traceback")
查看 此问题。
API变更¶
import-export 的 v4 版本包含对 API 的多项更改。这些更改在下表中进行了总结。详细信息请参考 此 PR。
如果您通过重写方法自定义了导入-导出功能,那么在使用v4之前可能需要修改您的安装。
如果您没有重写任何方法,那么您不应受到这些更改的影响,也不需要更改您的代码。
API 变更包括对方法参数的更改,尽管某些方法名称已更改。
处理行数据的方法已更新,以使方法参数标准化。这样做是为了解决因方法调用间参数不同而导致的不一致问题,并允许更轻松的扩展性。
import_export.resources.Resource¶
重命名的方法¶
上一个 |
新 |
摘要 |
|---|---|---|
|
|
|
|
|
|
参数更改¶
本节描述参数已更改的方法。
上一个 |
新 |
摘要 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import_export.mixins.BaseImportExportMixin¶
参数更改¶
上一个 |
新 |
摘要 |
|---|---|---|
|
|
|
|
|
|
import_export.mixins.BaseImportMixin¶
参数更改¶
上一个 |
新 |
摘要 |
|---|---|---|
|
|
|
|
|
|
|
|
|
import_export.mixins.BaseExportMixin¶
参数更改¶
上一个 |
新 |
摘要 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
import_export.fields.Field¶
参数更改¶
上一个 |
新 |
摘要 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
import_export.forms.ImportExportFormBase¶
如果你已经子类化了 forms 中的一个类,那么你可能需要修改传递给构造函数的参数。
input_format 字段已从 ImportForm 移至父类 (ImportExportFormBase) 并重命名为 format。
ExportForm 的 file_format 字段已被移除,现替换为 format。
参数更改¶
上一个 |
新 |
摘要 |
|---|---|---|
|
|
|