finds.dev← search

// the find

etianen/django-reversion

★ 3,168 · Python · BSD-3-Clause · updated Jun 2026

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.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →