models.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. """
  2. Testing of admin inline formsets.
  3. """
  4. from __future__ import unicode_literals
  5. import random
  6. from django.contrib.contenttypes.fields import GenericForeignKey
  7. from django.contrib.contenttypes.models import ContentType
  8. from django.db import models
  9. from django.utils.encoding import python_2_unicode_compatible
  10. @python_2_unicode_compatible
  11. class Parent(models.Model):
  12. name = models.CharField(max_length=50)
  13. def __str__(self):
  14. return self.name
  15. @python_2_unicode_compatible
  16. class Teacher(models.Model):
  17. name = models.CharField(max_length=50)
  18. def __str__(self):
  19. return self.name
  20. @python_2_unicode_compatible
  21. class Child(models.Model):
  22. name = models.CharField(max_length=50)
  23. teacher = models.ForeignKey(Teacher, models.CASCADE)
  24. content_type = models.ForeignKey(ContentType, models.CASCADE)
  25. object_id = models.PositiveIntegerField()
  26. parent = GenericForeignKey()
  27. def __str__(self):
  28. return 'I am %s, a child of %s' % (self.name, self.parent)
  29. class Book(models.Model):
  30. name = models.CharField(max_length=50)
  31. class Author(models.Model):
  32. name = models.CharField(max_length=50)
  33. books = models.ManyToManyField(Book)
  34. class NonAutoPKBook(models.Model):
  35. rand_pk = models.IntegerField(primary_key=True, editable=False)
  36. author = models.ForeignKey(Author, models.CASCADE)
  37. title = models.CharField(max_length=50)
  38. def save(self, *args, **kwargs):
  39. while not self.rand_pk:
  40. test_pk = random.randint(1, 99999)
  41. if not NonAutoPKBook.objects.filter(rand_pk=test_pk).exists():
  42. self.rand_pk = test_pk
  43. super(NonAutoPKBook, self).save(*args, **kwargs)
  44. class EditablePKBook(models.Model):
  45. manual_pk = models.IntegerField(primary_key=True)
  46. author = models.ForeignKey(Author, models.CASCADE)
  47. title = models.CharField(max_length=50)
  48. class Holder(models.Model):
  49. dummy = models.IntegerField()
  50. class Inner(models.Model):
  51. dummy = models.IntegerField()
  52. holder = models.ForeignKey(Holder, models.CASCADE)
  53. readonly = models.CharField("Inner readonly label", max_length=1)
  54. def get_absolute_url(self):
  55. return '/inner/'
  56. class Holder2(models.Model):
  57. dummy = models.IntegerField()
  58. class Inner2(models.Model):
  59. dummy = models.IntegerField()
  60. holder = models.ForeignKey(Holder2, models.CASCADE)
  61. class Holder3(models.Model):
  62. dummy = models.IntegerField()
  63. class Inner3(models.Model):
  64. dummy = models.IntegerField()
  65. holder = models.ForeignKey(Holder3, models.CASCADE)
  66. # Models for ticket #8190
  67. class Holder4(models.Model):
  68. dummy = models.IntegerField()
  69. class Inner4Stacked(models.Model):
  70. dummy = models.IntegerField(help_text="Awesome stacked help text is awesome.")
  71. holder = models.ForeignKey(Holder4, models.CASCADE)
  72. class Inner4Tabular(models.Model):
  73. dummy = models.IntegerField(help_text="Awesome tabular help text is awesome.")
  74. holder = models.ForeignKey(Holder4, models.CASCADE)
  75. # Models for #12749
  76. class Person(models.Model):
  77. firstname = models.CharField(max_length=15)
  78. class OutfitItem(models.Model):
  79. name = models.CharField(max_length=15)
  80. class Fashionista(models.Model):
  81. person = models.OneToOneField(Person, models.CASCADE, primary_key=True)
  82. weaknesses = models.ManyToManyField(OutfitItem, through='ShoppingWeakness', blank=True)
  83. class ShoppingWeakness(models.Model):
  84. fashionista = models.ForeignKey(Fashionista, models.CASCADE)
  85. item = models.ForeignKey(OutfitItem, models.CASCADE)
  86. # Models for #13510
  87. class TitleCollection(models.Model):
  88. pass
  89. class Title(models.Model):
  90. collection = models.ForeignKey(TitleCollection, models.SET_NULL, blank=True, null=True)
  91. title1 = models.CharField(max_length=100)
  92. title2 = models.CharField(max_length=100)
  93. # Models for #15424
  94. class Poll(models.Model):
  95. name = models.CharField(max_length=40)
  96. class Question(models.Model):
  97. poll = models.ForeignKey(Poll, models.CASCADE)
  98. class Novel(models.Model):
  99. name = models.CharField(max_length=40)
  100. class Chapter(models.Model):
  101. name = models.CharField(max_length=40)
  102. novel = models.ForeignKey(Novel, models.CASCADE)
  103. class FootNote(models.Model):
  104. """
  105. Model added for ticket 19838
  106. """
  107. chapter = models.ForeignKey(Chapter, models.PROTECT)
  108. note = models.CharField(max_length=40)
  109. # Models for #16838
  110. class CapoFamiglia(models.Model):
  111. name = models.CharField(max_length=100)
  112. class Consigliere(models.Model):
  113. name = models.CharField(max_length=100, help_text='Help text for Consigliere')
  114. capo_famiglia = models.ForeignKey(CapoFamiglia, models.CASCADE, related_name='+')
  115. class SottoCapo(models.Model):
  116. name = models.CharField(max_length=100)
  117. capo_famiglia = models.ForeignKey(CapoFamiglia, models.CASCADE, related_name='+')
  118. class ReadOnlyInline(models.Model):
  119. name = models.CharField(max_length=100, help_text='Help text for ReadOnlyInline')
  120. capo_famiglia = models.ForeignKey(CapoFamiglia, models.CASCADE)
  121. # Models for #18433
  122. class ParentModelWithCustomPk(models.Model):
  123. my_own_pk = models.CharField(max_length=100, primary_key=True)
  124. name = models.CharField(max_length=100)
  125. class ChildModel1(models.Model):
  126. my_own_pk = models.CharField(max_length=100, primary_key=True)
  127. name = models.CharField(max_length=100)
  128. parent = models.ForeignKey(ParentModelWithCustomPk, models.CASCADE)
  129. def get_absolute_url(self):
  130. return '/child_model1/'
  131. class ChildModel2(models.Model):
  132. my_own_pk = models.CharField(max_length=100, primary_key=True)
  133. name = models.CharField(max_length=100)
  134. parent = models.ForeignKey(ParentModelWithCustomPk, models.CASCADE)
  135. def get_absolute_url(self):
  136. return '/child_model2/'
  137. # Models for #19425
  138. class BinaryTree(models.Model):
  139. name = models.CharField(max_length=100)
  140. parent = models.ForeignKey('self', models.SET_NULL, null=True, blank=True)
  141. # Models for #19524
  142. class LifeForm(models.Model):
  143. pass
  144. class ExtraTerrestrial(LifeForm):
  145. name = models.CharField(max_length=100)
  146. class Sighting(models.Model):
  147. et = models.ForeignKey(ExtraTerrestrial, models.CASCADE)
  148. place = models.CharField(max_length=100)
  149. # Models for #18263
  150. class SomeParentModel(models.Model):
  151. name = models.CharField(max_length=1)
  152. class SomeChildModel(models.Model):
  153. name = models.CharField(max_length=1)
  154. position = models.PositiveIntegerField()
  155. parent = models.ForeignKey(SomeParentModel, models.CASCADE)
  156. # Other models
  157. class ProfileCollection(models.Model):
  158. pass
  159. class Profile(models.Model):
  160. collection = models.ForeignKey(ProfileCollection, models.SET_NULL, blank=True, null=True)
  161. first_name = models.CharField(max_length=100)
  162. last_name = models.CharField(max_length=100)