Skip to content

DjangoVersionControl

Matt Harley edited this page Jul 9, 2015 · 2 revisions

Version Controlled Database with Django

from django.db import models

import reversion

class BaseModelManager(models.Manager):
    def deleted(self):
        return reversion.get_deleted(self.model)

class BaseModel(models.Model):
    objects = BaseModelManager()

    # this is not needed if small_image is created at set_image
    def save(self, *args, **kwargs):
        with reversion.create_revision():
            super(BaseModel, self).save(*args, **kwargs)

    @property
    def created(self):
        return self.versions().last().revision.date_created
        
    @property
    def updated(self):
        return self.versions().first().revision.date_created

    def versions(self):
        return reversion.get_for_object(self)

    class Meta:
        abstract = True

@reversion.register
class MyModel(BaseModel):
    stuff = models.CharField(max_length=255, unique=True)
    # ...
  • and this in your admin.py
from django.contrib import admin

import reversion

from .models import MyModel

class MyModelAdmin(reversion.VersionAdmin):
    pass

admin.site.register(MyModel, MyModelAdmin)
  • and voila
screen shot 2015-07-09 at 3 22 15 pm screen shot 2015-07-09 at 3 22 26 pm
Clone this wiki locally