Skip to main content

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 from 0 (default version start number)
  • version_id - uuid4 that represents different versions of the same record
  • version_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

  1. Doesn't work with bulk operations.
  2. 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

model_version-0.2.2.tar.gz (7.0 kB view details)

Uploaded Source

Built Distribution

model_version-0.2.2-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

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

Hashes for model_version-0.2.2.tar.gz
Algorithm Hash digest
SHA256 41e34ee6c8dc6a4971eeff4f3a5e70453e3f15586cb938f24d4177e44fac0401
MD5 6a8d77bbeac0dadb0bbae9132273e3a8
BLAKE2b-256 fcc88f56851c9ff454bfe9d36953ffdf1e9d005b29efb05cd1be4344caa1e0d9

See more details on using hashes here.

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

Hashes for model_version-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6b0b0cc23adf8b04c9d22e736abcf05287c17f5d863ce1696fedb6b4d7cebac1
MD5 0d45f9244bfe62d57a55cad07b875117
BLAKE2b-256 1526eb5c8425e653e220d2a113ad8b89e06d821f0316ae5ecb8fb43ae585b24e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page