导出工作流

本文档详细描述了导出数据的工作流程,并提供了可自定义导出流程的钩子。

序列图中以黄色高亮显示的方法表示可被重写的公共方法。

导出工作流程序列图

export() 方法从数据库中检索 QuerySet 并将其格式化为 tablib.Dataset

定义了多种钩子方法,允许您自定义导出数据。

当方法被调用时会发生以下情况:

  1. export() 方法接收一个可选的 queryset 参数。kwargs 字典可以保存用于创建导出的附加信息,例如从 Admin UI 调用时。

  2. 调用了 before_export() 钩子。

  3. 如果没有传递 QuerySet,则会调用 get_queryset() 方法。

  4. 调用了 filter_export() 钩子。你可以重写此方法来修改导出的 queryset。

  5. 对于 QuerySet 中的每个实例,都会调用 :meth:`~import_export.resources.Resource.export_resource`(实例作为参数传入)。

  6. 对于在 fields 中定义的每个字段:

    • export_field() 被调用时,字段和实例作为参数传入。

    • 如果 dehydrate 方法在 Resource 上被定义,那么会调用此方法来提取字段值,否则会为每个已定义的字段调用 export(),并将实例作为参数传递。

    • get_value() 被调用时传入实例以从中获取导出值。

    • 该字段的小部件 render() 方法被调用来获取导出值。

  7. 每个值都被附加到一个 tablib.Dataset

  8. tablib.Datasetexport() 返回。