django-import-export-extensions
extends the functionality of
django-import-export
adding the following features:
- Import/export resources in the background via Celery
- Manage import/export jobs via Django Admin
- DRF integration that allows to work with import/export jobs via API
- Support drf-spectacular generated API schema
- Additional fields and widgets (FileWidget, IntermediateManyToManyWidget, IntermediateManyToManyField)
To install django-import-export-extensions
, run this command in your
terminal:
pip install django-import-export-extensions
Add import_export
and import_export_extensions
to INSTALLED_APPS
# settings.py
INSTALLED_APPS = (
...,
"import_export",
"import_export_extensions",
)
Run migrate
command to create ImportJob/ExportJob models and
collectstatic
to let Django collect package static files to use in the
admin.
python manage.py migrate
python manage.py collectstatic
Prepare resource for your model
# apps/books/resources.py
from import_export_extensions.resources import CeleryModelResource
from .. import models
class BookResource(CeleryModelResource):
class Meta:
model = models.Book
Use CeleryImportExportMixin
class and set resource_classes
in admin
model to import/export via Django Admin
# apps/books/admin.py
from django.contrib import admin
from import_export_extensions.admin import CeleryImportExportMixin
from .. import resources
@admin.register(models.Book)
class BookAdmin(CeleryImportExportMixin, admin.ModelAdmin):
resource_classes = [resources.BookResource]
Prepare view sets to import/export via API
# apps/books/api/views.py
from .. import resources
from import_export_extensions.api import views
class BookExportViewSet(views.ExportJobViewSet):
resource_class = resources.BookResource
class BookImportViewSet(views.ImportJobViewSet):
resource_class = resources.BookResource
Don't forget to configure Celery if you want to run import/export in background
- Free software: MIT license