models.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from django.db import models
  2. from south.db import DEFAULT_DB_ALIAS
  3. # If we detect Django 1.7 or higher, then exit
  4. # Placed here so it's guaranteed to be imported on Django start
  5. import django
  6. if django.VERSION[0] > 1 or (django.VERSION[0] == 1 and django.VERSION[1] > 6):
  7. raise RuntimeError("South does not support Django 1.7 or higher. Please use native Django migrations.")
  8. class MigrationHistory(models.Model):
  9. app_name = models.CharField(max_length=255)
  10. migration = models.CharField(max_length=255)
  11. applied = models.DateTimeField(blank=True)
  12. @classmethod
  13. def for_migration(cls, migration, database):
  14. try:
  15. # Switch on multi-db-ness
  16. if database != DEFAULT_DB_ALIAS:
  17. # Django 1.2
  18. objects = cls.objects.using(database)
  19. else:
  20. # Django <= 1.1
  21. objects = cls.objects
  22. return objects.get(
  23. app_name=migration.app_label(),
  24. migration=migration.name(),
  25. )
  26. except cls.DoesNotExist:
  27. return cls(
  28. app_name=migration.app_label(),
  29. migration=migration.name(),
  30. )
  31. def get_migrations(self):
  32. from south.migration.base import Migrations
  33. return Migrations(self.app_name)
  34. def get_migration(self):
  35. return self.get_migrations().migration(self.migration)
  36. def __str__(self):
  37. return "<%s: %s>" % (self.app_name, self.migration)