semvec/pypi-packages huggingface dataset:
django-versions 1.0.1
A django application to enable versioning of data stored in Django models.
License: MIT

django-versions
###############

Overview
========

``django-versions`` allows you to version the data stored in django models seamlessly. To get started all you need to do is to set ``VERSIONS_REPOSITORIES`` variable in your settings and configure the repositories you would like to use, then just subclass your Model from ``VersionsModel`` and start saving data::

    from django.db import models
    from versions.models import VersionsModel

    class MyModel(VersionsModel):
        text = models.TextField()

Installation
============

Dependencies
------------

* Mercurial >= 1.5.2
* Django == 1.1.X

Installing django-versions
--------------------------

If your are installing from source, you just need to run the following command from the base of the ``django-versions`` source tree::

    python setup.py install

If you want to install the package without checking out the source you should run::

    pip install django-versions

    # OR if you don't have pip installed (you should definitely check out pip)
    easy_install django-versions

For the time being, we need to patch Django to allow us to gain access to the related model from Manager classes. There is a patch included at the root of the source tree ``django.patch`` that includes the required changes. To patch django, go to the root of your checkout of django 1.1.X and run::

    patch -p0 < /path/to/django-versions/django.patch

Add ``VERSIONS_REPOSITORIES`` to your settings file, pointing to the location where you would like ``django-versions`` to create and store your model history::

    VERSIONS_REPOSITORIES = {
         'default': {
              'backend': 'versions.backends.hg',
              'local': '/path/to/my/projects/model/history',
              }
         }

Enabling Version Management
...........................

Install the ``VersionsMiddleware``::

    MIDDLEWARE_CLASSES = (
        ...
        'versions.middleware.VersionsMiddleware',
        ...
        )

Or handle enabling editing of Versioned models manually::

    from versions.base import revision

    @revision.commit_on_success
    def my_editing_function(request):
        m = MyModel.objects.get(pk=1)
        m.save()


    def my_other_editing_function(request):
        with revision:
            m = MyModel.objects.get(pk=1)
            m.save()