Source code for django_transitions.admin
# -*- coding: utf-8 -*-
"""Mixins for the django admin."""
# Django
from django.contrib import messages
from django.http import HttpResponseRedirect
[docs]class WorkflowAdminMixin(object):
"""
A mixin to provide workflow transition actions.
It will create an admin log entry.
"""
change_form_template = 'transitions/change_form.html'
[docs] def response_change(self, request, obj):
"""Add actions for the workflow events."""
events = list(obj.get_available_events())
for event in events:
if '_' + event['transition'].name not in request.POST:
continue
before = obj.state
if getattr(obj, event['transition'].name)():
obj.save()
after = obj.state
message = ('Status changed from {0} to {1} by transition {2}'
.format(before, after, event['transition'].name))
self.message_user(request, message, messages.SUCCESS)
self.log_change(request, obj, message)
else:
message = ('Status could not be changed from '
'{0} by transition {1}'
.format(before, event['transition'].name))
self.message_user(request, message, messages.ERROR)
return HttpResponseRedirect('.')
return super(WorkflowAdminMixin, self).response_change(request, obj)