models.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. from django.core.validators import MaxValueValidator
  2. from django.db import models
  3. from . import validators
  4. class Human(models.Model):
  5. name = models.CharField(
  6. 'Имя',
  7. max_length=50
  8. )
  9. surname = models.CharField(
  10. 'Фамилия',
  11. max_length=50
  12. )
  13. class Employment(models.Model):
  14. human = models.OneToOneField(
  15. Human,
  16. on_delete=models.CASCADE,
  17. related_name='employment',
  18. verbose_name='Человек'
  19. )
  20. is_unemployed = models.BooleanField(
  21. 'Безработный',
  22. null=True,
  23. blank=True
  24. )
  25. class AdditionalDataHuman(models.Model):
  26. GENDER_CHOICES = (
  27. ('F', 'Female'),
  28. ('M', 'Male'),
  29. ('O', 'Other'),
  30. )
  31. human = models.OneToOneField(
  32. Human,
  33. on_delete=models.CASCADE,
  34. related_name='additional_data',
  35. verbose_name='Человек'
  36. )
  37. gender = models.CharField(
  38. 'Пол',
  39. max_length=1,
  40. choices=GENDER_CHOICES
  41. )
  42. blood_type = models.PositiveIntegerField(
  43. 'Группа крови',
  44. validators=[MaxValueValidator(4)]
  45. )
  46. is_married = models.BooleanField(
  47. 'Находится в браке'
  48. )
  49. class Marriage(models.Model):
  50. husband = models.ForeignKey(
  51. Human,
  52. on_delete=models.CASCADE,
  53. related_name='husband',
  54. verbose_name='Муж'
  55. )
  56. wife = models.ForeignKey(
  57. Human,
  58. on_delete=models.CASCADE,
  59. related_name='wife',
  60. verbose_name='Жена'
  61. )
  62. beginning_of_marriage = models.DateTimeField(
  63. 'Начало брака'
  64. )
  65. end_of_marriage = models.DateTimeField(
  66. 'Конец брака',
  67. null=True,
  68. blank=True
  69. )
  70. is_marriage_valid = models.BooleanField(
  71. 'Брак действителен',
  72. default=True
  73. )
  74. class PlaceOfResidence(models.Model):
  75. owner = models.ForeignKey(
  76. Human,
  77. on_delete=models.SET_NULL,
  78. related_name='addresses',
  79. null=True,
  80. blank=True,
  81. verbose_name='Владелец'
  82. )
  83. country = models.CharField(
  84. 'Страна',
  85. max_length=50
  86. )
  87. city = models.CharField(
  88. 'Город',
  89. max_length=50
  90. )
  91. address = models.CharField(
  92. 'Адрес',
  93. max_length=100
  94. )
  95. postal_code = models.PositiveIntegerField(
  96. 'Почтовый индекс'
  97. )
  98. def clean(self):
  99. validators.check_length_of_number(self.postal_code, 6)
  100. def save(self, *args, **kwargs):
  101. self.full_clean()
  102. return super().save(*args, **kwargs)
  103. class Action(models.Model):
  104. human = models.ForeignKey(
  105. Human,
  106. on_delete=models.CASCADE,
  107. related_name='actions',
  108. verbose_name='Человек'
  109. )
  110. description = models.TextField(
  111. 'Описание'
  112. )
  113. evaluation = models.PositiveIntegerField(
  114. 'Оценка',
  115. validators=[MaxValueValidator(10)]
  116. )
  117. date = models.DateTimeField(
  118. 'Дата',
  119. auto_now=True
  120. )