Django admin rq is a django package that creates a 4 step (form, preview, main, complete) asynchronous workflow from a ModelAdmin's changelist or changeform. By using the JobAdminMixin class in your ModelAdmin subclass you can define and run jobs by overriding appropriate inherited methods. It builds upon django-rq.
- Setup django-rq according to documentation
pip install django-admin-rq
- Add
django_admin_rq
to yourINSTALLED_APPS
- Add django-admin-rq.urls to your url config
::
url(r'^django-admin-rq/', include('django_admin_rq.urls')),
- Add custom execption handler to queues:
settings.py
::
RQ_QUEUES = {
'default': {
'HOST': 'localhost',
'PORT': 6379,
'DB': 0,
'DEFAULT_TIMEOUT': 360,
}
}
RQ = {
'EXCEPTION_HANDLERS': ['django_admin_rq.exceptions.exception_handler']
}
- Decorate your async tasks with the @job decorator.
- They take the three arguments all of which need to be pickleable:
- An instance of django_admin_rq.models.JobStatus
- The form data from step 1
- An extra context object you provide if necessary
::
from rq import get_current_job
from django_rq import job
@job
def async_task(job_status, form_data, extra_context):
job = get_current_job()
job_status.set_job_id(job.get_id())
job_status.start()
... do your job
job_status.finish()