models.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from __future__ import unicode_literals
  2. import copy
  3. import datetime
  4. from django.contrib.auth.models import User
  5. from django.db import models
  6. from django.utils.encoding import python_2_unicode_compatible
  7. @python_2_unicode_compatible
  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. def __str__(self):
  13. return "%s (%s, %s)" % (self.title, self.id, self.base.id)
  14. def save(self, *args, **kwargs):
  15. super(RevisionableModel, self).save(*args, **kwargs)
  16. if not self.base:
  17. self.base = self
  18. kwargs.pop('force_insert', None)
  19. kwargs.pop('force_update', None)
  20. super(RevisionableModel, self).save(*args, **kwargs)
  21. def new_revision(self):
  22. new_revision = copy.copy(self)
  23. new_revision.pk = None
  24. return new_revision
  25. class Order(models.Model):
  26. created_by = models.ForeignKey(User, models.CASCADE)
  27. text = models.TextField()
  28. @python_2_unicode_compatible
  29. class TestObject(models.Model):
  30. first = models.CharField(max_length=20)
  31. second = models.CharField(max_length=20)
  32. third = models.CharField(max_length=20)
  33. def __str__(self):
  34. return 'TestObject: %s,%s,%s' % (self.first, self.second, self.third)