django-changes

A utility to store and access information about changes on objects in a Django project.


License
BSD-3-Clause
Install
pip install django-changes==0.2.2

Documentation

django-changes

A utility to store and access information about changes on objects in a Django project.

TravisButton

Installation

pip install django-changes

Add to your Python path or setup.py install and add 'changes' to your INSTALLED_APPS setting.

Usage

You can use by importing the helper:

from changes import changes
# ...
changes.add_change(someobj, who=request.user)

Or by using the object directly:

from changes.models import Change
# ...
Change.objects.add_change_for_object(someobj, why='Because')

To get a queryset of changes that were added for an objects:

changes.get_changes_for(someobj)

or:

Change.objects.get_changes_for_object(someobj)

To get a queryset of changes that were made by a user:

changes.get_changes_by(someuser)

or:

Change.objects.get_changes_by_user(someuser)

You can also do things like this:

Change.objects.all().by_user(someuser)
changes.get_changes_for(someobj).anonymous()

Included is a 'Mixin' for your models that you expect to be recording changes on a lot that will give you the reverse relation changes:

from changes.models import ChangesMixin
# ...
class SomeModel(ChangesMixin, models.Model)

This mixin will give you some helpful methods:

somemodelinstance.add_change(why='Time for change')
somemodelinstance.get_changes()

You can also add a change when saving:

somemodelinstance.save(changed=True, who=someuser, why='Changing')

The default behaviour is to not save a change:

somemodelinstance.save()

The mixin also omits a signal, change_added when a change is added for the object.

See the source code for more.

Running Test

To run the tests:

python setup.py test

Need Help?

Email: rvause@gmail.com

Github: https://github.com/rvause/django-changes