===== DJANGO-REVERSION ===== ==== Low-level API ==== Please refer to [[http://django-reversion.readthedocs.org/en/latest/api.html|django-reversion low level API v 1.8]] It is valid for lower versions too. ==== Switch from "django-pro-history" to "django-reversion" ==== The steps to follow are: - delete fields django-pro-history fields from the models, where they are present; - register the models from the previous step to django-reversion; - create initial revisions for the registered models; - use django-pro-history methods instead of django-reversion methods in "base" models API; - migrate registred models with South to remove django-pro-history fields from the db; The final results to check are: - it is possible to obtain programmaticly the different versions of an objects; - it is possible to obtain programmaticly the different versions of an objects for a certain time interval; - the models do not have django-pro-history fields anymore and are registered to django-reversion; - django-reversion added to the base requirements; - history fields "eradicated" from db; - it is possible to install GF including django-reversion; - it is possible to upgrade GF with django-reversion through an automatic script. === Delete fields django-pro-history fields from the models, where they are present === "history" fields removed from the models: * gas/models/order.py * GASSupplierOrder * GASSupplierOrderProduct * GASMemberOrder * Delivery * Withdrawal * supplier/models.py * Supplier * SupplierAgent * Certification * ProductCategory * ProductMU * ProductPU * Product * SupplierStock * base/models.py * Person * Contact * Place * DefaultTransition * gas/models/base.py * GAS * GASConfig * GASActivist * GASMember * GASSupplierStock * GASSupplierSolidalPact === Register the models from the previous step to django-reversion === For each of the model in the previous step, add: import reversion . . . class MyModel(): . . . if not reversion.is_registered(MyModel): reversion.register(MyModel) === Create initial revisions for the registered models === Exec: django-admin.py createinitialrevisions [app[.model]] [-v {0,1,2,3}] === Use django-pro-history methods instead of django-reversion methods in "base" models API === === Migrate registred models with South to remove django-pro-history fields from the db === ==== Django-reversion low level API ==== It is possible to use django-reversion to retrieve information from the saved objects versions. To produce versions from an object updates, django-reversion has to be instructed accordingly. The easiest way is to register the model to the reversion.middleware.RevisionMiddleware. > NOTE: django-reversion version 1.5.7 does not save the User for the incoming requests into the revision. > If you want to have this facility, please use [[https://github.com/befair/django-reversion/tree/release-1.5.7-middleware-with-user | beFair version]] based on version 1.5.7 . From then, it is possible to retrieve versions and info from an object. === All object revisions === import reversion from app.models import mymodel obj = mymodel.objects.get(pk=1) reversion.get_for_object(obj) === Object revisions for a time interval === import reversion from app.models import mymodel obj = mymodel.objects.get(pk=1) reversion.get_for_object(obj).filter(revision__date_created__gt=datetime.datetime(y, m, d), revision__date_created__lt=datetime.datetime(y1, m1, d1))