django-model-changes allows you to track model instance changes.
Project description
django-model-changes allows you to track the state and changes of a model instance:
Quick start
Install django-model-changes:
pip install django-model-changes
Add “django_model_changes” to your INSTALLED_APPS setting like this:
INSTALLED_APPS = ( ... 'django_model_changes', )
Add the ChangesMixin to 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() True
Listen 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)
Overview
django-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 instance after it was created, saved or deleted the last time.
- old_state()
The previous previous_state(), i.e. the state of the instance before it 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()
Documentation
Refer to the doc strings in changes.py, or build the documentation:
>>> pip install Sphinx >>> cd docs >>> make html Open build/html/index.html
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
Hashes for django-model-changes-0.13.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | e081e8a496fe04d25ecfc4a8ad5d395845439d023d69c7c90e1b505486ba463e |
|
MD5 | 683f26152fcf9c7c0796908fd9b1a098 |
|
BLAKE2b-256 | 8b4921fcfbe5e6b588e4631f476085d4f788ad24d856b74b593372c775812091 |