1. import copy
    
  2. import datetime
    
  3. 
    
  4. from django.contrib.auth.models import User
    
  5. from django.db import models
    
  6. 
    
  7. 
    
  8. class RevisionableModel(models.Model):
    
  9.     base = models.ForeignKey("self", models.SET_NULL, null=True)
    
  10.     title = models.CharField(blank=True, max_length=255)
    
  11.     when = models.DateTimeField(default=datetime.datetime.now)
    
  12. 
    
  13.     def save(self, *args, force_insert=None, force_update=None, **kwargs):
    
  14.         super().save(
    
  15.             *args, force_insert=force_insert, force_update=force_update, **kwargs
    
  16.         )
    
  17.         if not self.base:
    
  18.             self.base = self
    
  19.             super().save(*args, **kwargs)
    
  20. 
    
  21.     def new_revision(self):
    
  22.         new_revision = copy.copy(self)
    
  23.         new_revision.pk = None
    
  24.         return new_revision
    
  25. 
    
  26. 
    
  27. class Order(models.Model):
    
  28.     created_by = models.ForeignKey(User, models.CASCADE)
    
  29.     text = models.TextField()
    
  30. 
    
  31. 
    
  32. class TestObject(models.Model):
    
  33.     first = models.CharField(max_length=20)
    
  34.     second = models.CharField(max_length=20)
    
  35.     third = models.CharField(max_length=20)
    
  36. 
    
  37.     def __str__(self):
    
  38.         return "TestObject: %s,%s,%s" % (self.first, self.second, self.third)