Django app which handles ORM objects' versions.
ognajD is Django-compactible application which handles versionning for ORM models. Main feature is for ognjaD to be a "plug-in" Django application, thus capable to work with "little-to-no" configuring and changes to Django project.
ognajd stores objects' versions in own table, relied on contenttypes
application.
ognajD @ v0.2.4 can:
- catch object's save / update signals
- store snapshot of object in DB with:
- timestamp
- serialized version
- hash
- object version may be serialized (currently, only JSON) as:
- diff with previous version (by default)
- raw dumps
- inline with versione for admin models
sample-project
is a showcase django project, based on famous
polls
application.
You can reference to it for usage cases, examples, testing.You must never deploy sample_project
in
production due to exposed SECRET_KEY
.
django~=3.2.7
might work on lesser versions, not testedjsondiff~=1.3.0
might work on lesser versions, not tested
contenttypes
-
make sure to use latest
pip
:python3 -m pip install --upgrade pip
-
install
django-ognajd
:python3 -m pip install django-ognajd
-
download release asset (
.tar.gz
or.whl
) -
make sure to use latest
pip
:python3 -m pip install --upgrade pip
-
install
django-ognajd
from file:python3 -m pip install /path/to/downloaded/asset.tar.gz # or .whl
-
clone project:
git clone \ --depth=1 \ --branch=master \ git@github.com:omelched/django-ognajd.git \ </path/to/downloads>
-
move
/django-ognajd/ognajd
solely to folder containing django appsmv </path/to/downloads>/django-ognajd/ognajd \ </path/to/django/project/apps>
-
remove leftovers
rm -rf </path/to/downloads>/django-ognajd
Add ognajd
to INSTALLED_APPS
in your Django project settings.py
.
Make sure it is installed before django.contrib.admin
.
If you installed package the third way, </path/to/django/project/apps>
must be added to PYTHONPATH
. If you not sure add code below in your Django project manage.py
before calling main()
:
sys.path.append('</path/to/django/project/apps>')
To register your model as eligible for versioning add attribute-class VersioningMeta
to model class definition.
For typing, linters, autocompletion tyou can inherit from ognajd.models.VersioningMeta
.
Then set preferred options.
e.g:
# .../your_app/models.py
from django.db import models
from ognajd.models import VersioningMeta
class Question(models.Model):
class VersioningMeta(VersioningMeta):
store_diff = False
... # fields' definitions
Name | Description | Type | Default |
---|---|---|---|
enabled |
True : if model will be versioned False : if will not |
bool |
True |
store_diff |
True : model's history will be stored as diffs False : as dumps |
bool |
True |
save_empty_changes |
True : if empty changes will be registered False : if will not |
bool |
True |
@omelched (Denis Omelchenko)
ognajD version history and changelist available at releases page.
This project is licensed under the GNU APGLv3 License - see the LICENSE file for details.
Inspiration, code snippets, etc.
- polls showcase app code from sample-django
- index incrementer at model save from
tinfoilboy