Import и export
Подключите ImportOption и/или ExportOption к ModelAdmin. Chassis
добавляет кнопки на странице списка (в тулбаре changelist),
preview/confirm для import и записи истории.
Полные таблицы полей: каталог options.
Анатомия страниц
Import
- Кнопка тулбара → посадочная страница импорта (форма загрузки + выбор backend).
- Preview: принятые строки, пропущенные дубликаты, ошибки валидации
(семейство
ImportPreviewDTO). - Подтверждение apply →
ImportApplyServiceпишет строки атомарно. - История: строки
ImportHistory, скачивание исходного файла.
Export
- Кнопка тулбара → форма экспорта (формат, backend, опциональные
filter_fields). - Задача пишет файл в
STORAGES['media']и сохраняетExportHistory. - История: статус, 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 при создании.
Форматы
| Поток | Форматы |
|---|---|
| Import | JSON, XML |
| Export | JSON, XML, CSV, XLSX |
formats=None означает все форматы enum.
Сценарий import
- Загрузите файл на посадочной странице import.
- Chassis строит preview: принятые строки, пропущенные дубликаты, ошибки валидации.
- Подтвердите apply.
ImportApplyServiceсоздаёт строки атомарно. - Дубликаты по уникальности пропускаются, а не перезаписываются.
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.
Имена таблиц в базе данных — chassis_import_histories и
chassis_export_histories.