Import and export
Attach ImportOption and/or ExportOption to a ModelAdmin. Chassis adds
list-page buttons (in the changelist toolbar), preview/confirm for import,
and history records.
Full field tables: Options catalog.
Page anatomy
Import
- Toolbar button → import landing (
uploadform + backend picker). - Preview page: accepted rows, skipped duplicates, validation errors
(
ImportPreviewDTOfamily). - Confirm apply →
ImportApplyServicewrites rows atomically. - History page:
ImportHistoryrows, download of the source file.
Export
- Toolbar button → export form (format, backend, optional
filter_fields). - Job writes a file to
STORAGES['media']and storesExportHistory. - History page: status, backend, download of the finished file.
Both flows share the backend picker documented in Import and export backends.
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 is required and cannot be blank. Empty formats or
filter_fields lists raise ValueError at construction.
Formats
| Flow | Formats |
|---|---|
| Import | JSON, XML |
| Export | JSON, XML, CSV, XLSX |
formats=None means every format in the enum.
Import flow
- Upload a file on the import landing page.
- Chassis builds a preview: accepted rows, skipped duplicates, validation errors.
- Confirm apply.
ImportApplyServicecreates rows atomically. - Uniqueness-based duplicates are skipped, not overwritten.
Preview DTOs: ImportPreviewDTO, ImportPreviewRowDTO,
ImportPreviewSkippedRowDTO.
Export flow
Export writes a file and stores it on ExportHistory. Optional
filter_fields become form filters. include_journals=True adds model
history/journal data when the project provides it.
Storage
Files go to STORAGES['media']. Configure that storage before enabling
import/export in production.
History
ImportHistory and ExportHistory persist job status, backend, and file
references. Users download finished export files from the history page.
Both tables are created by the package's single initial migration
(django_chassis.0001_initial). Run migrate after installing the app.
Their database names are chassis_import_histories and
chassis_export_histories.