安装和配置

import-export 可在 Python Package Index (PyPI) 上获取,因此可以使用标准的 Python 工具如 pipeasy_install 进行安装:

pip install django-import-export

这将自动安装tablib支持的默认格式。如果您需要额外格式,您应安装所需的额外依赖项适当的tablib依赖项(例如``pip install django-import-export[xlsx]``)。

要安装所有可用格式,请使用 pip install django-import-export[all]

所有格式,请参阅 tablib 文档

或者,您可以直接安装 git 仓库以获取开发版本:

pip install -e git+https://github.com/django-import-export/django-import-export.git#egg=django-import-export

现在,你可以开始了,除非你还想使用admin中的import-export功能。在这种情况下,你需要将它添加到你的``INSTALLED_APPS``中,并让Django收集它的静态文件。

# settings.py
INSTALLED_APPS = (
    ...
    'import_export',
)
$ python manage.py collectstatic

所有先决条件已设置完成!请参阅 入门 了解如何在项目中使用 import-export。

设置

您可以在设置文件中配置以下内容:

IMPORT_EXPORT_USE_TRANSACTIONS

控制资源导入是否应使用数据库事务。默认为 True。使用事务使导入更安全,因为导入期间的失败不会仅导入部分数据集。

可以通过在 Resource 类上设置 use_transactions 类属性来覆盖。

IMPORT_EXPORT_SKIP_ADMIN_LOG

如果设置为 True,在通过 Admin UI 导入时会跳过创建管理员日志条目。默认为 False。这可以加快导入大型数据集的速度,但代价是失去审计跟踪。

可以在继承自 ImportMixinModelAdmin 类中通过设置 skip_admin_log 类属性来覆盖。

IMPORT_EXPORT_TMP_STORAGE_CLASS

指向首选临时存储模块的字符串路径。

控制导入期间用于存储临时上传文件的存储类。默认为 import_export.tmp_storages.TempFolderStorage

可以在继承自 ImportMixinModelAdmin 类中通过设置 tmp_storage_class 类属性来覆盖。

IMPORT_EXPORT_DEFAULT_FILE_STORAGE

自定义存储实现的字符串路径。

此设置已弃用,仅在使用低于4.2版本的Django时适用,并将在未来的版本中移除。

IMPORT_EXPORT_IMPORT_PERMISSION_CODE

如果设置,列出用户执行“import”操作所需的权限代码。默认为``None``,表示所有用户都可以执行导入操作。

Django的内置权限有代码``add``、changedelete``和``view。您还可以添加自己的权限。例如,如果您将此值设置为'import',那么您可以在示例应用中为导入定义一个显式权限,代码如下:

from core.models import Book
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType

content_type = ContentType.objects.get_for_model(Book)
permission = Permission.objects.create(
  codename="import_book",
  name="Can import book",
  content_type=content_type,
)

现在只有被分配了'import_book'权限的用户才能执行导入操作。更多信息请参阅`Django auth <https://docs.djangoproject.com/en/stable/topics/auth/default/>`_文档。

IMPORT_EXPORT_EXPORT_PERMISSION_CODE

定义与 IMPORT_EXPORT_IMPORT_PERMISSION_CODE 相同的行为,但针对导出。

IMPORT_EXPORT_CHUNK_SIZE

一个整数,定义在迭代QuerySet进行数据导出时的块大小。默认为``100``。您可以通过减小它来节省内存使用,或通过增加它来加快导出速度。

可以在 Resource 类中通过设置 chunk_size 类属性来覆盖。

IMPORT_EXPORT_SKIP_ADMIN_CONFIRM

如果为 True,Admin UI 中将不会向用户显示导入确认页面。文件将一步完成导入。

默认情况下,导入将在事务中执行。如果导入导致任何运行时错误(包括验证错误),则错误将呈现给用户,然后整个事务将回滚。

请注意,如果您通过配置禁用事务支持(或者您的数据库不支持事务),那么验证错误仍会显示给用户,但有效的行将被导入。

可以为模型管理员启用此标志,使用 skip_import_confirm 标志。

IMPORT_EXPORT_SKIP_ADMIN_EXPORT_UI

一个布尔值,当从 变更列表页面 发起导出时,将跳过 Admin UI 中的 导出表单。文件将一步导出。

如果启用:

  • resource_classes 列表中的第一个元素将被使用。

  • 将使用 EXPORT_FORMATS 列表中的第一个元素。

可以为模型管理员启用此标志,使用 skip_export_form 标志。

IMPORT_EXPORT_SKIP_ADMIN_ACTION_EXPORT_UI

一个布尔值,将跳过Admin UI中的:ref:导出表单<admin_ui_exporting>,但仅当从:ref:`Admin UI操作<export_via_admin_action>`或:ref:`更改表单<export_from_model_change_form>`上的“导出”按钮请求导出时。

IMPORT_EXPORT_ESCAPE_FORMULAE_ON_EXPORT

如果设置为 True,字符串将通过移除任何前导的 '=' 字符进行清理。这是为了防止执行 Excel 公式。默认情况下为 False

导入导出_导出时转义非法字符

如果导出到XLSX格式时生成`IllegalCharacterError <https://openpyxl.readthedocs.io/en/latest/api/openpyxl.utils.exceptions.html>`_,那么如果此标志为``True``,字符串将通过移除任何无效的Excel字符进行清理,并用unicode替换字符替换它们。默认情况下为``False``,意味着会捕获``IllegalCharacterError``并将其重新抛出为``ValueError``。

导入导出格式

定义在导入和导出期间允许的文件格式的列表。默认为 import_export.formats.base_formats.DEFAULT_FORMATS。值必须是 import_export.formats.base_formats 中提供的那些,例如

# settings.py
from import_export.formats.base_formats import XLSX
IMPORT_EXPORT_FORMATS = [XLSX]

这可以通过声明``formats``属性为特定model admin设置。

重要格式

一个定义在导入过程中允许的文件格式的列表。默认为``IMPORT_EXPORT_FORMATS``。这些值必须是在``import_export.formats.base_formats``中提供的值,例如

# settings.py
from import_export.formats.base_formats import CSV, XLSX
IMPORT_FORMATS = [CSV, XLSX]

这可以通过声明 import_formats 属性来为特定的模型管理员设置。

EXPORT_FORMATS

一个定义导出时允许的文件格式的列表。默认为``IMPORT_EXPORT_FORMATS``。取值必须是``import_export.formats.base_formats``中提供的值,例如

# settings.py
from import_export.formats.base_formats import XLSX
EXPORT_FORMATS = [XLSX]

这可以通过声明 export_formats 属性为特定模型管理员设置。

导入_导出_导入_忽略空行

如果设置为 True,在XSLX导入时将忽略没有内容的行。这可以防止一个旧的Excel 1.0错误,该错误会导致openpyxl的 max_rows 计算所有逻辑空行。某些编辑器(如LibreOffice)可能会向文件中添加 \(2^{20}\) 个空行,从而导致显著的速度下降。默认情况下,此选项为 False

示例应用

有一个示例应用程序展示了import_export的功能。

在开始之前,使用 这些说明 设置一个虚拟环境("venv")。

您可以按照以下方式初始化和运行示例应用程序:

cd tests
./manage.py makemigrations
./manage.py migrate
./manage.py createsuperuser
./manage.py loaddata author.json category.json book.json
./manage.py runserver

转到 http://127.0.0.1:8000

例如导入文件,参见 测试数据

配置日志记录

你可以调整日志级别以根据需要查看输出。这是一个示例配置,需放置在你的应用程序设置中:

LOGGING = {
    "version" 1,
    "handlers": {
        "console": {"level": "DEBUG", "class": "logging.StreamHandler"},
    },
    "loggers": {
        "django.db.backends": {"level": "INFO", "handlers": ["console"]},
        "import_export": {
            "handlers": ["console"],
            "level": "INFO",
        },
    },
}