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 hashes)

Uploaded Source

Built Distribution

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

Uploaded Python 3

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