Перейти к основному содержимому

Import и export

Добавлено в 1.0.1

Подключите ImportOption и/или ExportOption к ModelAdmin. Chassis добавляет кнопки на странице списка (в тулбаре changelist), preview/confirm для import и записи истории.

Полные таблицы полей: каталог options.

Анатомия страниц

Import

  1. Кнопка тулбара → посадочная страница импорта (форма загрузки + выбор backend).
  2. Preview: принятые строки, пропущенные дубликаты, ошибки валидации (семейство ImportPreviewDTO).
  3. Подтверждение apply → ImportApplyService пишет строки атомарно.
  4. История: строки ImportHistory, скачивание исходного файла.

Export

  1. Кнопка тулбара → форма экспорта (формат, backend, опциональные filter_fields).
  2. Задача пишет файл в STORAGES['media'] и сохраняет ExportHistory.
  3. История: статус, backend, скачивание готового файла.

Оба флоу используют выбор backend, описанный в Backend import и export.

from django_chassis.enums import ExportFormat, ImportFormat
from django_chassis.options import ExportOption, ImportOption


class BookAdmin(ChassisAdminMixin, ModelAdmin):
options = [
ImportOption(permission='import_book', fields=['title', 'isbn'], formats=[ImportFormat.JSON, ImportFormat.XML]),
ExportOption(
permission='export_book',
fields=['title', 'isbn', 'status'],
formats=[ExportFormat.JSON, ExportFormat.CSV, ExportFormat.XLSX],
filter_fields=['status'],
include_journals=False,
),
]

permission обязателен и не может быть пустым. Пустые списки formats или filter_fields поднимают ValueError при создании.

Форматы

ПотокФорматы
ImportJSON, XML
ExportJSON, XML, CSV, XLSX

formats=None означает все форматы enum.

Сценарий import

  1. Загрузите файл на посадочной странице import.
  2. Chassis строит preview: принятые строки, пропущенные дубликаты, ошибки валидации.
  3. Подтвердите apply. ImportApplyService создаёт строки атомарно.
  4. Дубликаты по уникальности пропускаются, а не перезаписываются.

Preview DTO: ImportPreviewDTO, ImportPreviewRowDTO, ImportPreviewSkippedRowDTO.

Сценарий export

Export пишет файл и кладёт его в ExportHistory. Необязательные filter_fields становятся фильтрами формы. include_journals=True добавляет history/journal модели, если проект это отдаёт.

Хранилище

Файлы идут в STORAGES['media']. Настройте это хранилище до включения import/export в продакшене.

История

ImportHistory и ExportHistory хранят статус задания, backend и ссылки на файлы. Готовые файлы export скачивают со страницы истории. Обе таблицы создаёт единственная initial-миграция пакета (django_chassis.0001_initial). После установки приложения выполните migrate.

Изменено в 1.0.1

Имена таблиц в базе данных — chassis_import_histories и chassis_export_histories.

См. также