django-export-celery


License
MIT
Install
pip install django-export-celery==0.3.2

Documentation

Overview

django-export-celery is a Django application that enables long processing exports using celery and django-import-export

Dependencies

Python 3.6+

Packages

Django>=3.1
celery>=5.0.0
django-import-export>=2.2.0

Installation and Configuration

Celery must be setup before starting.
Please refer to Using Celery with Django for more information.

  1. Install with pip
pip install django-export-celery
  1. Add apps to INSTALLED_APPS to project settings.
# settings.py
INSTALLED_APPS = (
    ...
    'import_export',
    'django_export_celery',
)

# Optionally, sending emails is enabled by default on completed export
# Disable it by setting to False
DJANGO_EXPORT_CELERY_ENABLE_EMAIL = False
  1. Setup model and resources
# apps/models.py
from django.db import models
from import_export.resources import ModelResource


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    @staticmethod
    def get_export_resources():
        return {
            'rsc1': ('Question', QuestionResource),
        }


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)


class QuestionResource(ModelResource):
    class Meta:
        model = Question
  1. Add ExportCeleryMixin to admin view in admin.py
# apps/admin.py
from django.contrib import admin
from .models import Question, Choice
from import_export.admin import ImportExportMixin
from django_export_celery.mixins import ExportCeleryMixin


@admin.register(Question)
class QuestionAdmin(ExportCeleryMixin, admin.ModelAdmin):
    list_display = (
        'question_text',
        'pub_date',
    )

# also supports django-import-export admin mixins like so
@admin.register(Choice)
class ChoiceAdmin(ImportExportMixin, ExportCeleryMixin, admin.ModelAdmin):
    list_display = (
        'question',
        'choice_text',
        'votes',
    )

How to use

  1. Click EXPORT button in upper right in model view

image-1

  1. Select export Format and click SUBMIT

image-2

  1. Export jobs can be found in the Export Jobs app along with job status and file link

image-3

Demo App

./project/ contains the necessary files to start a sample project

To get started

cd project
pip install -r requirements.txt
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver 8000

TODO: dummy data setup

TODO: Docker setup

Known Issues

A list of known issues to be patched in the future

  • Does not respect ordering when exporting
  • File format ods is not supported

Issue Tracker

If you have any bugs, suggestions, or compliants please report an issue here

References