Package: django-model-changes
django-model-changes allows you to track the state and changes of a model instance:Quick startInstall django-model-changes:pip install django-model-changesAdd “django_model_changes” to your INSTALLED_APPS setting like this:INSTALLED_APPS = (
    ...
    'django_model_changes',
)Add theChangesMixinto your model:>>> from django.db import models
>>> from django_model_changes import ChangesMixin

>>> class User(ChangesMixin, models.Model):
>>>     name = models.CharField(max_length=100)Get instance changes:>>> user = User()
>>> user.name = 'Foo Bar'
>>> user.save()

>>> user.name 'I got a new name'

>>> # Get current state
>>> user.current_state()
{'id': 1, 'name': 'I got a new name'}

>>> # Get previous state (state after previous save/create/delete)
>>> user.previous_state()
{'id': 1, 'name': 'Foo Bar'}

>>> # Get old state (state before previous save/create/delete)
>>> user.old_state()
{'id': None, 'name': ''}

>>> # Get changes from the previous state to the current state
>>> user.changes()
{'name': ('Foo Bar', 'I got a new name')}

>>> # Get changes from the old state to the current state
>>> user.old_changes()
{'id': (None, 1), 'name': ('', 'Foo Bar')}

>>> # Check if the instance was persisted (saved)
>>> user.was_persisted()
False

>>> # Check if the instance is persisted
>>> user.is_persisted()
TrueListen for changes:>>> from django_model_changes import post_change>>> def my_callback(sender, instance, **kwargs):
>>>     # Do something with previous and current state
>>>     instance.old_state()
>>>     instance.current_state()>>>     # There is also a convenience method to get
>>>     # an instance from the previous state
>>>     instance.old_instance()>>> post_change.connect(my_callback, User)Overviewdjango-model-changes allows you to retrieve the following states from an
instance:current_state()The current state of the instance.previous_state()The state of the instanceafterit was created, saved or deleted the
last time.old_state()The previous previous_state(), i.e. the state of the instancebeforeit was created, saved or deleted the last time.It also provides convenience methods to get changes between states:changes()Changes from previous_state to current_state.previous_changes()Changes from old_state to previous_state.old_changes()Changes from old_state to current_state.And the following methods to determine if an instance was/is persisted in
the database:was_persisted()Was the instance persisted in its old state.is_persisted()Is the instance is_persisted in its current state.This schematic tries to illustrate how these methods relate to each other:after create/save/delete            after save/delete                  now
|                                   |                                  |
.-----------------------------------.----------------------------------.
|\                                  |\                                 |\
| \                                 | \                                | \
|  old_state()                      |  previous_state()                |  current_state()
|                                   |                                  |
|-----------------------------------|----------------------------------|
|  previous_changes() (prev - old)  |  changes() (cur - prev)          |
|-----------------------------------|----------------------------------|
|                      old_changes()  (cur - old)                      |
.----------------------------------------------------------------------.
 \                                                                      \
  \                                                                      \
   was_persisted()                                                        is_persisted()DocumentationRefer to the doc strings inchanges.py, or build the documentation:>>> pip install Sphinx
>>> cd docs
>>> make html
Open build/html/index.html