1. from django.db import models
    
  2. 
    
  3. 
    
  4. class Building(models.Model):
    
  5.     name = models.CharField(max_length=10)
    
  6. 
    
  7. 
    
  8. class Device(models.Model):
    
  9.     building = models.ForeignKey("Building", models.CASCADE)
    
  10.     name = models.CharField(max_length=10)
    
  11. 
    
  12. 
    
  13. class Port(models.Model):
    
  14.     device = models.ForeignKey("Device", models.CASCADE)
    
  15.     port_number = models.CharField(max_length=10)
    
  16. 
    
  17.     def __str__(self):
    
  18.         return "%s/%s" % (self.device.name, self.port_number)
    
  19. 
    
  20. 
    
  21. class Connection(models.Model):
    
  22.     start = models.ForeignKey(
    
  23.         Port,
    
  24.         models.CASCADE,
    
  25.         related_name="connection_start",
    
  26.         unique=True,
    
  27.     )
    
  28.     end = models.ForeignKey(
    
  29.         Port,
    
  30.         models.CASCADE,
    
  31.         related_name="connection_end",
    
  32.         unique=True,
    
  33.     )
    
  34. 
    
  35. 
    
  36. # Another non-tree hierarchy that exercises code paths similar to the above
    
  37. # example, but in a slightly different configuration.
    
  38. 
    
  39. 
    
  40. class TUser(models.Model):
    
  41.     name = models.CharField(max_length=200)
    
  42. 
    
  43. 
    
  44. class Person(models.Model):
    
  45.     user = models.ForeignKey(TUser, models.CASCADE, unique=True)
    
  46. 
    
  47. 
    
  48. class Organizer(models.Model):
    
  49.     person = models.ForeignKey(Person, models.CASCADE)
    
  50. 
    
  51. 
    
  52. class Student(models.Model):
    
  53.     person = models.ForeignKey(Person, models.CASCADE)
    
  54. 
    
  55. 
    
  56. class Class(models.Model):
    
  57.     org = models.ForeignKey(Organizer, models.CASCADE)
    
  58. 
    
  59. 
    
  60. class Enrollment(models.Model):
    
  61.     std = models.ForeignKey(Student, models.CASCADE)
    
  62.     cls = models.ForeignKey(Class, models.CASCADE)
    
  63. 
    
  64. 
    
  65. # Models for testing bug #8036.
    
  66. 
    
  67. 
    
  68. class Country(models.Model):
    
  69.     name = models.CharField(max_length=50)
    
  70. 
    
  71. 
    
  72. class State(models.Model):
    
  73.     name = models.CharField(max_length=50)
    
  74.     country = models.ForeignKey(Country, models.CASCADE)
    
  75. 
    
  76. 
    
  77. class ClientStatus(models.Model):
    
  78.     name = models.CharField(max_length=50)
    
  79. 
    
  80. 
    
  81. class Client(models.Model):
    
  82.     name = models.CharField(max_length=50)
    
  83.     state = models.ForeignKey(State, models.SET_NULL, null=True)
    
  84.     status = models.ForeignKey(ClientStatus, models.CASCADE)
    
  85. 
    
  86. 
    
  87. class SpecialClient(Client):
    
  88.     value = models.IntegerField()
    
  89. 
    
  90. 
    
  91. # Some model inheritance exercises
    
  92. 
    
  93. 
    
  94. class Parent(models.Model):
    
  95.     name = models.CharField(max_length=10)
    
  96. 
    
  97. 
    
  98. class Child(Parent):
    
  99.     value = models.IntegerField()
    
  100. 
    
  101. 
    
  102. class Item(models.Model):
    
  103.     name = models.CharField(max_length=10)
    
  104.     child = models.ForeignKey(Child, models.SET_NULL, null=True)
    
  105. 
    
  106.     def __str__(self):
    
  107.         return self.name
    
  108. 
    
  109. 
    
  110. # Models for testing bug #19870.
    
  111. 
    
  112. 
    
  113. class Fowl(models.Model):
    
  114.     name = models.CharField(max_length=10)
    
  115. 
    
  116. 
    
  117. class Hen(Fowl):
    
  118.     pass
    
  119. 
    
  120. 
    
  121. class Chick(Fowl):
    
  122.     mother = models.ForeignKey(Hen, models.CASCADE)
    
  123. 
    
  124. 
    
  125. class Base(models.Model):
    
  126.     name = models.CharField(max_length=10)
    
  127.     lots_of_text = models.TextField()
    
  128. 
    
  129.     class Meta:
    
  130.         abstract = True
    
  131. 
    
  132. 
    
  133. class A(Base):
    
  134.     a_field = models.CharField(max_length=10)
    
  135. 
    
  136. 
    
  137. class B(Base):
    
  138.     b_field = models.CharField(max_length=10)
    
  139. 
    
  140. 
    
  141. class C(Base):
    
  142.     c_a = models.ForeignKey(A, models.CASCADE)
    
  143.     c_b = models.ForeignKey(B, models.CASCADE)
    
  144.     is_published = models.BooleanField(default=False)