Skip to main content

history compare for django-reversion

Project description

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.

Coverage Status on coveralls.io

coveralls.io/r/jedie/django-reversion-compare

Build Status on travis-ci.org

travis-ci.org/jedie/django-reversion-compare

Requirements Status on requires.io

requires.io/github/jedie/django-reversion-compare/requirements/

installation

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

setup

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

INSTALLED_APPS = (
    'django...',
    ...
    'reversion', # https://github.com/etianen/django-reversion
    'reversion_compare', # https://github.com/jedie/django-reversion-compare
    ...
)

# Add reversion models to admin interface:
# ADD_REVERSION_ADMIN=True

usage

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

admin.py e.g.:

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

from my_app.models import ExampleModel

class ExampleModelAdmin(CompareVersionAdmin):
    pass

admin.site.register(ExampleModel, 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

patch_admin(User)

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:
patch_admin(Page)

customize

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)

screenshots

Here some screenshots of django-reversion-compare:


How to select the versions to compare:

django-reversion-compare_v0_1_0-01.png


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

django-reversion-compare_v0_1_0-02.png


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

django-reversion-compare_v0_1_0-03.png


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

django-reversion-compare_v0_3_0-01.png

  • 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

(Unittests need django-tools)

run unittests

via setup.py:

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

via runtests.py:

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

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$ ./tests/manage.py run_testserver

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. Maybe other versions are compatible, too.)

changelog

  • v0.5.3 - 13.07.2015

    • Update admin.py to avoid RemovedInDjango19Warning (contributed by luzfcb)

  • v0.5.2 - 14.04.2015:

    • contributed by Samuel Spencer:

      • Added Django 1.8 support: pull #35

      • list of changes for reverse fields incorrectly includes a “deletion” for the item that was added in: issues #34

  • v0.5.1 - 28.02.2015:

    • activate previous/next links and add unitests for them

  • v0.5.0 - 27.02.2015:

    • refactory unittests, test with Django v1.7 and Python 2.7 & 3.4

  • v0.4.0 - 02.02.2015:

    • Updates for django 1.7 support

    • Add settings.ADD_REVERSION_ADMIN

  • v0.3.5 - 03.01.2013:

    • Remove date from version string. issues 9

  • v0.3.4 - 20.06.2012:

    • Use VersionAdmin.revision_manager rather than default_revision_manager, contributed by Mark Lavin - see: pull request 7

    • Use logging for all debug prints, contributed by Bojan Mihelac - see: pull request 8

  • v0.3.3 - 11.06.2012:

    • Bugfix “ValueError: zero length field name in format” with Python 2.6 issues 5

  • v0.3.2 - 04.06.2012:

  • v0.3.1 - 01.06.2012:

    • Bugfix: force unicode in html diff

    • Bugfix in unittests

  • v0.3.0 - 16.05.2012:

    • Enhanced handling of m2m changes with follow and non-follow relations.

  • v0.2.2 - 15.05.2012:

    • Compare many-to-many in the right way.

  • v0.2.1 - 10.05.2012:

  • v0.2.0 - 09.05.2012:

    • many-to-many compare works, too.

  • v0.1.0 - 08.05.2012:

    • First release

  • v0.0.1 - 08.05.2012:

contact

Come into the conversation, besides the github communication features:

Forum

official ‘django-reversion-compare’ Forum

IRC

#pylucid on freenode.net (Yes, the PyLucid channel…)

webchat

http://webchat.freenode.net/?channels=pylucid

donation

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-reversion-compare-0.5.3.tar.gz (39.8 kB view details)

Uploaded Source

Built Distributions

django_reversion_compare-0.5.3-py3.4.egg (45.6 kB view details)

Uploaded Source

django_reversion_compare-0.5.3-py2.py3-none-any.whl (51.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file django-reversion-compare-0.5.3.tar.gz.

File metadata

File hashes

Hashes for django-reversion-compare-0.5.3.tar.gz
Algorithm Hash digest
SHA256 1bcba747901a59793aa9a776f9d7bf3aa5841fc4a896cf2bb7b9d93f19e232f1
MD5 33cdf02f684f3f37f96334b48bf0a640
BLAKE2b-256 875763e7fe16cc3822a87820f16a60f6603ae824a11c0ad8545953b6a6fc9bc1

See more details on using hashes here.

File details

Details for the file django_reversion_compare-0.5.3-py3.4.egg.

File metadata

File hashes

Hashes for django_reversion_compare-0.5.3-py3.4.egg
Algorithm Hash digest
SHA256 fdde95c3cd21e001ac1c1aa064e715e1ee27b42d7147f3ff8ef71738fdf2395e
MD5 4a4f36dd77e2961f0d1ce0a0e40a7818
BLAKE2b-256 31c2ccb752c5d3721324c7fe461c275b650eace6d3ef256a5cf0665cb21a57b6

See more details on using hashes here.

File details

Details for the file django_reversion_compare-0.5.3-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_reversion_compare-0.5.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 399f7ecb18d280c563bca2d5d70c5658afdc7ee34bf9fa17ec6dd7230933913a
MD5 9f33ad3d3c35a9f24e6cafc2f6523f38
BLAKE2b-256 cc0d107937e959337a62ac095501a49b21912d248dfffb5873eb92837fc28f08

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page