skip to navigation
skip to content

Not Logged In

django-reversion-compare 0.5.5

history compare for django-reversion

django-reversion-compare is an extension to django-reversion that provides a history compare view to compare two versions of a model which is under reversion.

Comparing model versions is not a easy task. Maybe there are different view how this should looks like. This project will gives you a generic way to see whats has been changed.

Many parts are customizable by overwrite methods or subclassing, see above.


Just use:

pip install django-reversion-compare

Optional you can install google-diff-match-patch otherwise difflib would be used. The easiest way it to use the unofficial package diff-match-patch, e.g.:

pip install diff-match-patch


Add reversion_compare to INSTALLED_APPS in your, e.g.:

    'reversion', #
    'reversion_compare', #

# Add reversion models to admin interface:


Inherit from CompareVersionAdmin instead of VersionAdmin to get the compare feature. e.g.:

from django.contrib import admin
from reversion_compare.admin import CompareVersionAdmin

from my_app.models import ExampleModel

class ExampleModelAdmin(CompareVersionAdmin):
    pass, ExampleModelAdmin)

If you’re using an existing third party app, then you can add patch django-reversion-compare into its admin class by using the reversion_compare.helpers.patch_admin() method. For example, to add version control to the built-in User model:

from reversion_compare.helpers import patch_admin


e.g.: Add django-cms Page model:

from cms.models.pagemodel import Page
from reversion_compare.helpers import patch_admin

# Patch django-cms Page Model to add reversion-compare functionality:


It’s possible to change the look for every field or for a entire field type. You must only define a methods to your admin class with this name scheme:

  • "compare_%s" % field_name
  • "compare_%s" % field.get_internal_type()

If there exist no method with this name scheme, the fallback_compare() method would be used.

example for specify a compare method for a model field by name:

class YourAdmin(CompareVersionAdmin):
    def compare_foo_bar(self, obj_compare):
        """ compare the foo_bar model field """
        return "%r <-> %r" % (obj_compare.value1, obj_compare.value2)

and example using patch_admin with custom version admin class:

patch_admin(User, AdminClass=YourAdmin)


Here some screenshots of django-reversion-compare:

How to select the versions to compare:

from v0.1.0: DateTimeField compare (last update), TextField compare (content) with small changes and a ForeignKey compare (child model instance was added):

from v0.1.0: Same as above, but the are more lines changed in TextField and the ForeignKey relation was removed:

Example screenshot from v0.3.0: a many-to-many field compare (friends, hobbies):

  • In the first line, the m2m object has been changed.
  • line 2: A m2m object was deleted
  • line 3: A m2m object was removed from this entry (but not deleted)
  • line 4: This m2m object has not changed


(Unittests need django-tools)

run unittests


$ cd path/to/django-reversion-compare
django-reversion-compare$ ./ test


$ cd path/to/django-reversion-compare
django-reversion-compare$ ./

Helpfull for writing and debugging unittests is to run a local test server with the same data. e.g.:

~$ cd path/to/django-reversion-compare/
/django-reversion-compare$ ./

migration will be run and a superuser will be created. Username: test Password: 12345678

Version compatibility

Reversion-Compare Django
>=v0.5.2 v1.7, v1.8
>=v0.4 v1.7
<v0.4 v1.4

These are the unittests variants. See also: /.travis.yml Maybe other versions are compatible, too.



Come into the conversation, besides the github communication features:

Forum official ‘django-reversion-compare’ Forum
IRC #pylucid on (Yes, the PyLucid channel…)
File Type Py Version Uploaded on Size
django-reversion-compare-0.5.5.tar.gz (md5) Source 2015-07-24 36KB
django_reversion_compare-0.5.5-py2.py3-none-any.whl (md5) Python Wheel py2.py3 2015-07-24 52KB
django_reversion_compare-0.5.5-py3.4.egg (md5) Python Egg 3.4 2015-07-24 46KB
  • Downloads (All Versions):
  • 16 downloads in the last day
  • 382 downloads in the last week
  • 4113 downloads in the last month