models.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import uuid
  2. from django.contrib.auth.models import User
  3. from django.db import models
  4. class MyFileField(models.FileField):
  5. pass
  6. class Member(models.Model):
  7. name = models.CharField(max_length=100)
  8. birthdate = models.DateTimeField(blank=True, null=True)
  9. gender = models.CharField(max_length=1, blank=True, choices=[('M', 'Male'), ('F', 'Female')])
  10. email = models.EmailField(blank=True)
  11. def __str__(self):
  12. return self.name
  13. class Band(models.Model):
  14. name = models.CharField(max_length=100)
  15. style = models.CharField(max_length=20)
  16. members = models.ManyToManyField(Member)
  17. def __str__(self):
  18. return self.name
  19. class Album(models.Model):
  20. band = models.ForeignKey(Band, models.CASCADE)
  21. featuring = models.ManyToManyField(Band, related_name='featured')
  22. name = models.CharField(max_length=100)
  23. cover_art = models.FileField(upload_to='albums')
  24. backside_art = MyFileField(upload_to='albums_back', null=True)
  25. def __str__(self):
  26. return self.name
  27. class HiddenInventoryManager(models.Manager):
  28. def get_queryset(self):
  29. return super().get_queryset().filter(hidden=False)
  30. class Inventory(models.Model):
  31. barcode = models.PositiveIntegerField(unique=True)
  32. parent = models.ForeignKey('self', models.SET_NULL, to_field='barcode', blank=True, null=True)
  33. name = models.CharField(blank=False, max_length=20)
  34. hidden = models.BooleanField(default=False)
  35. # see #9258
  36. default_manager = models.Manager()
  37. objects = HiddenInventoryManager()
  38. def __str__(self):
  39. return self.name
  40. class Event(models.Model):
  41. main_band = models.ForeignKey(
  42. Band,
  43. models.CASCADE,
  44. limit_choices_to=models.Q(pk__gt=0),
  45. related_name='events_main_band_at',
  46. )
  47. supporting_bands = models.ManyToManyField(
  48. Band,
  49. blank=True,
  50. related_name='events_supporting_band_at',
  51. help_text='Supporting Bands.',
  52. )
  53. start_date = models.DateField(blank=True, null=True)
  54. start_time = models.TimeField(blank=True, null=True)
  55. description = models.TextField(blank=True)
  56. link = models.URLField(blank=True)
  57. min_age = models.IntegerField(blank=True, null=True)
  58. class Car(models.Model):
  59. owner = models.ForeignKey(User, models.CASCADE)
  60. make = models.CharField(max_length=30)
  61. model = models.CharField(max_length=30)
  62. def __str__(self):
  63. return "%s %s" % (self.make, self.model)
  64. class CarTire(models.Model):
  65. """
  66. A single car tire. This to test that a user can only select their own cars.
  67. """
  68. car = models.ForeignKey(Car, models.CASCADE)
  69. class Honeycomb(models.Model):
  70. id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
  71. location = models.CharField(max_length=20)
  72. class Bee(models.Model):
  73. """
  74. A model with a FK to a model that won't be registered with the admin
  75. (Honeycomb) so the corresponding raw ID widget won't have a magnifying
  76. glass link to select related honeycomb instances.
  77. """
  78. honeycomb = models.ForeignKey(Honeycomb, models.CASCADE)
  79. class Individual(models.Model):
  80. """
  81. A model with a FK to itself. It won't be registered with the admin, so the
  82. corresponding raw ID widget won't have a magnifying glass link to select
  83. related instances (rendering will be called programmatically in this case).
  84. """
  85. name = models.CharField(max_length=20)
  86. parent = models.ForeignKey('self', models.SET_NULL, null=True)
  87. soulmate = models.ForeignKey('self', models.CASCADE, null=True, related_name='soulmates')
  88. class Company(models.Model):
  89. name = models.CharField(max_length=20)
  90. class Advisor(models.Model):
  91. """
  92. A model with a m2m to a model that won't be registered with the admin
  93. (Company) so the corresponding raw ID widget won't have a magnifying
  94. glass link to select related company instances.
  95. """
  96. name = models.CharField(max_length=20)
  97. companies = models.ManyToManyField(Company)
  98. class Student(models.Model):
  99. name = models.CharField(max_length=255)
  100. class Meta:
  101. ordering = ('name',)
  102. def __str__(self):
  103. return self.name
  104. class School(models.Model):
  105. name = models.CharField(max_length=255)
  106. students = models.ManyToManyField(Student, related_name='current_schools')
  107. alumni = models.ManyToManyField(Student, related_name='previous_schools')
  108. def __str__(self):
  109. return self.name
  110. class Profile(models.Model):
  111. user = models.ForeignKey('auth.User', models.CASCADE, to_field='username')
  112. def __str__(self):
  113. return self.user.username