Django model version mixin
Project description
Model version
Model version allows to track changes to Django model instances. Each time
an instance is updated, its version
number is incremented and old values are
copied to a new record, that represents previous version of the current instance.
Installation
To install the library use pip:
pip install model_version
Usage
To enable model versioning ModelVersion
should be used as one of base classes
a model inherits from:
from model_version import ModelVersion
class MyModel(ModelVersion):
...
This will add three new fields to the model:
version
- integer number starting from0
(default version start number)version_id
-uuid4
that represents different versions of the same recordversion_created_at
- timestamp record
Create and apply migrations with the new fields:
python ./manage.py makemigration
python ./manage.py migrate
Disable versioning
There's a context manager disabled_versioning
that allows to disable model
versioning for a specific operation:
from model_version import disabled_versioning
from myapp.models import MyModel
record = MyModel.objects.create(name="foo")
assert record.version == 0
with disabled_versioning():
record.name = "bar"
record.save()
assert record.version == 0
Context variable based on contextvars
is used under the hood. It can be used
directly to manually manage version creation process:
from model_version.settings import versioning_is_disabled
reset_token = versioning_is_disabled.set(True)
... # non-versioned operations go here
versioning_is_disabled.reset(reset_token)
Limitations
- Doesn't work with bulk operations.
- Requires additional DB query on save.
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
Built Distribution
File details
Details for the file model_version-0.2.2.tar.gz
.
File metadata
- Download URL: model_version-0.2.2.tar.gz
- Upload date:
- Size: 7.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.12.0 Darwin/22.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 41e34ee6c8dc6a4971eeff4f3a5e70453e3f15586cb938f24d4177e44fac0401 |
|
MD5 | 6a8d77bbeac0dadb0bbae9132273e3a8 |
|
BLAKE2b-256 | fcc88f56851c9ff454bfe9d36953ffdf1e9d005b29efb05cd1be4344caa1e0d9 |
File details
Details for the file model_version-0.2.2-py3-none-any.whl
.
File metadata
- Download URL: model_version-0.2.2-py3-none-any.whl
- Upload date:
- Size: 7.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.12.0 Darwin/22.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6b0b0cc23adf8b04c9d22e736abcf05287c17f5d863ce1696fedb6b4d7cebac1 |
|
MD5 | 0d45f9244bfe62d57a55cad07b875117 |
|
BLAKE2b-256 | 1526eb5c8425e653e220d2a113ad8b89e06d821f0316ae5ecb8fb43ae585b24e |