1. """Models for test_natural.py"""
    
  2. import uuid
    
  3. 
    
  4. from django.db import models
    
  5. 
    
  6. 
    
  7. class NaturalKeyAnchorManager(models.Manager):
    
  8.     def get_by_natural_key(self, data):
    
  9.         return self.get(data=data)
    
  10. 
    
  11. 
    
  12. class NaturalKeyAnchor(models.Model):
    
  13.     data = models.CharField(max_length=100, unique=True)
    
  14.     title = models.CharField(max_length=100, null=True)
    
  15. 
    
  16.     objects = NaturalKeyAnchorManager()
    
  17. 
    
  18.     def natural_key(self):
    
  19.         return (self.data,)
    
  20. 
    
  21. 
    
  22. class FKDataNaturalKey(models.Model):
    
  23.     data = models.ForeignKey(NaturalKeyAnchor, models.SET_NULL, null=True)
    
  24. 
    
  25. 
    
  26. class NaturalKeyThing(models.Model):
    
  27.     key = models.CharField(max_length=100, unique=True)
    
  28.     other_thing = models.ForeignKey(
    
  29.         "NaturalKeyThing", on_delete=models.CASCADE, null=True
    
  30.     )
    
  31.     other_things = models.ManyToManyField(
    
  32.         "NaturalKeyThing", related_name="thing_m2m_set"
    
  33.     )
    
  34. 
    
  35.     class Manager(models.Manager):
    
  36.         def get_by_natural_key(self, key):
    
  37.             return self.get(key=key)
    
  38. 
    
  39.     objects = Manager()
    
  40. 
    
  41.     def natural_key(self):
    
  42.         return (self.key,)
    
  43. 
    
  44.     def __str__(self):
    
  45.         return self.key
    
  46. 
    
  47. 
    
  48. class NaturalPKWithDefault(models.Model):
    
  49.     id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    
  50.     name = models.CharField(max_length=100, unique=True)
    
  51. 
    
  52.     class Manager(models.Manager):
    
  53.         def get_by_natural_key(self, name):
    
  54.             return self.get(name=name)
    
  55. 
    
  56.     objects = Manager()
    
  57. 
    
  58.     def natural_key(self):
    
  59.         return (self.name,)
    
  60. 
    
  61. 
    
  62. class FKAsPKNoNaturalKeyManager(models.Manager):
    
  63.     def get_by_natural_key(self, *args, **kwargs):
    
  64.         return super().get_by_natural_key(*args, **kwargs)
    
  65. 
    
  66. 
    
  67. class FKAsPKNoNaturalKey(models.Model):
    
  68.     pk_fk = models.ForeignKey(
    
  69.         NaturalKeyAnchor, on_delete=models.CASCADE, primary_key=True
    
  70.     )
    
  71. 
    
  72.     objects = FKAsPKNoNaturalKeyManager()
    
  73. 
    
  74.     def natural_key(self):
    
  75.         raise NotImplementedError("This method was not expected to be called.")