Django Admin Support

django_fsm.admin.FlowAdminMixin adds transition actions and state charts to Django admin. This optional integration uses Viewflow Pro templates and static files; install and configure Viewflow Pro alongside django-fsm.

The examples use the model and flow from Separate Flow Classes. The flow’s on_success callback saves the new state.

from django.contrib import admin
from django_fsm.admin import FlowAdminMixin
from .flow import ReportFlow
from .models import Report

@admin.register(Report)
class ReportAdmin(FlowAdminMixin, admin.ModelAdmin):
    readonly_fields = ('state_field',)
    flow_state = ReportFlow.state_field

The mixin constructs ReportFlow(obj) for each object. Override get_object_flow(self, request, obj) if your flow needs additional context. Transition views check permissions and conditions before calling the method.

Editable Fields

By default transition forms do not edit model fields. To allow specific fields:

def get_transition_fields(self, request, obj, slug):
    if slug == 'approve':
        return ['text']
    return None

Template Customization

The change list and form use admin/fsm_change_list.html and admin/fsm_change_form.html. Transition forms search these paths in order:

  • admin/<app_label>/<model_name>/fsm_transition_form.html
  • admin/<app_label>/fsm_transition_form.html
  • admin/fsm_transition_form.html

Set transition_form_template to select a template explicitly.

Revision History

The mixin supports reversion.admin.VersionAdmin through its create_revision() wrapper.