1. import datetime
    
  2. 
    
  3. from django.db import DJANGO_VERSION_PICKLE_KEY, models
    
  4. from django.utils.translation import gettext_lazy as _
    
  5. 
    
  6. 
    
  7. def standalone_number():
    
  8.     return 1
    
  9. 
    
  10. 
    
  11. class Numbers:
    
  12.     @staticmethod
    
  13.     def get_static_number():
    
  14.         return 2
    
  15. 
    
  16. 
    
  17. class PreviousDjangoVersionQuerySet(models.QuerySet):
    
  18.     def __getstate__(self):
    
  19.         state = super().__getstate__()
    
  20.         state[DJANGO_VERSION_PICKLE_KEY] = "1.0"
    
  21.         return state
    
  22. 
    
  23. 
    
  24. class MissingDjangoVersionQuerySet(models.QuerySet):
    
  25.     def __getstate__(self):
    
  26.         state = super().__getstate__()
    
  27.         del state[DJANGO_VERSION_PICKLE_KEY]
    
  28.         return state
    
  29. 
    
  30. 
    
  31. class Group(models.Model):
    
  32.     name = models.CharField(_("name"), max_length=100)
    
  33.     objects = models.Manager()
    
  34.     previous_django_version_objects = PreviousDjangoVersionQuerySet.as_manager()
    
  35.     missing_django_version_objects = MissingDjangoVersionQuerySet.as_manager()
    
  36. 
    
  37. 
    
  38. class Event(models.Model):
    
  39.     title = models.CharField(max_length=100)
    
  40.     group = models.ForeignKey(Group, models.CASCADE, limit_choices_to=models.Q())
    
  41. 
    
  42. 
    
  43. class Happening(models.Model):
    
  44.     when = models.DateTimeField(blank=True, default=datetime.datetime.now)
    
  45.     name = models.CharField(blank=True, max_length=100, default="test")
    
  46.     number1 = models.IntegerField(blank=True, default=standalone_number)
    
  47.     number2 = models.IntegerField(blank=True, default=Numbers.get_static_number)
    
  48.     event = models.OneToOneField(Event, models.CASCADE, null=True)
    
  49. 
    
  50. 
    
  51. class BinaryFieldModel(models.Model):
    
  52.     data = models.BinaryField(null=True)
    
  53. 
    
  54. 
    
  55. class Container:
    
  56.     # To test pickling we need a class that isn't defined on module, but
    
  57.     # is still available from app-cache. So, the Container class moves
    
  58.     # SomeModel outside of module level
    
  59.     class SomeModel(models.Model):
    
  60.         somefield = models.IntegerField()
    
  61. 
    
  62. 
    
  63. class M2MModel(models.Model):
    
  64.     added = models.DateField(default=datetime.date.today)
    
  65.     groups = models.ManyToManyField(Group)
    
  66. 
    
  67. 
    
  68. class AbstractEvent(Event):
    
  69.     class Meta:
    
  70.         abstract = True
    
  71.         ordering = ["title"]
    
  72. 
    
  73. 
    
  74. class MyEvent(AbstractEvent):
    
  75.     pass
    
  76. 
    
  77. 
    
  78. class Edition(models.Model):
    
  79.     event = models.ForeignKey("MyEvent", on_delete=models.CASCADE)