Install & Compatibility
Where this runs
tested against v5.0.2 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
muslpy 3.10–3.95 runs
installs and imports cleanly · install 0.0s · import 0.000s · 66.8MB
glibcpy 3.10–3.95 runs
installs and imports cleanly · install 3.7s · import 0.000s · 67MB
66MB installed
● package 66MB
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
FSMLogMixin
✓ from django_fsm_log import FSMLogMixin
✗ from django_fsm_log.mixins import FSMLogMixin
Add FSMLogMixin to your model and every transition will be logged automatically to StateLog.
from django.db import models
from django_fsm import FSMField, transition
from fsm_log.mixins import FSMLogMixin
class Article(FSMLogMixin, models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
state = FSMField(default='draft', protected=True)
@transition(field=state, source='draft', target='published')
def publish(self):
pass
# usage
article = Article.objects.create(title='Test', content='...')
article.publish()
article.save()
from fsm_log.models import StateLog
log_entries = StateLog.objects.filter(object_id=article.pk)
print(log_entries.count()) # >0
Upgrade
Version history
5.0.2latest on PyPI · released Jan 27, 2026
Audit
Dependencies
django-fsm-2requiredReplaced django-fsm in v4.0.0, breaking backward compatibility with older django-fsm
DjangorequiredRequired framework, version >=3.2