// the find
etianen/django-reversion
django-reversion is an extension to the Django web framework that provides version control for model instances.
django-reversion adds version control to Django model instances — every save inside a revision block gets a snapshot, so you can roll back an object or recover it after deletion. It's for Django apps that need an undo/audit trail on their data, especially combined with the admin.
The admin integration is the real draw: object history and a recover-deleted view work out of the box with almost no config. It serializes whole 'revision sets' of related objects together, not just single rows, so you can revert a change that touched several models atomically. It's been maintained for over a decade and tracks current Django versions (4.2+) rather than being frozen on an old LTS.
Version data lives in a generic serialized blob (django.core.serializers) keyed by content type, so there's no real schema for old data — renaming a field or model doesn't migrate history, it just breaks deserialization of past revisions. Revision tables grow unbounded by default; you have to wire up `deleterevisions` yourself or your version table becomes the biggest table in the database. Diffing between versions isn't built in — you get the raw serialized data back, not a field-level diff, so building a decent 'what changed' UI is on you.