Advertisement
avaaren

models and serializers

Jun 22nd, 2020
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.51 KB | None | 0 0
  1. class TimetableSerializer(serializers.ModelSerializer):
  2. group = GroupSerializer()
  3. day = DaySerializer()
  4. name_of_class = ClassSerializer()
  5. cabinet = CabinetSerializer()
  6.  
  7. class Meta:
  8. model = Timetable
  9. fields = ['id', 'number_of_class', 'group', 'day', 'name_of_class', 'cabinet']
  10. # Объект создается. Сделать проверку существование get() полей. Сделайть чтобы при занятии кабинета
  11. # в какой либо из дней нельзя было его на этот же день поставить
  12. def create(self, validated_data):
  13. group = Group.objects.get(number=validated_data['group']['number'])
  14. day = validated_data.pop('day')
  15. day = Day.objects.get_or_create(day=day['day'], day_of_week=day['day_of_week'])
  16. cabinet = Cabinet.objects.get(number=validated_data['cabinet']['number'])
  17. name_of_class = Class.objects.get(name=validated_data['name_of_class']['name'])
  18. number_of_class = validated_data['number_of_class']
  19. timetable = Timetable.objects.create(group=group, day=day[0], cabinet=cabinet, name_of_class=name_of_class, number_of_class=number_of_class)
  20.  
  21. return timetable
  22. _______________________________________________________________________________________________________________________
  23.  
  24. Модели
  25.  
  26. class Day(models.Model):
  27. '''Model with date and day of week'''
  28. day = models.DateField()
  29. day_of_week = models.CharField(max_length=10)
  30.  
  31. class Meta:
  32. verbose_name = 'День'
  33. verbose_name_plural = 'Дни'
  34.  
  35. def __str__(self):
  36. return f'{self.day_of_week}-{self.day}'
  37.  
  38.  
  39. class Group(models.Model):
  40. '''Model with number of group'''
  41. number = models.CharField(max_length=6)
  42. slug = models.SlugField(max_length=10, default='empty')
  43.  
  44. class Meta:
  45. verbose_name='Группа'
  46. verbose_name_plural='Группы'
  47.  
  48. def __str__(self):
  49. return f'Группа {self.number}'
  50.  
  51. def save(self, *args, **kwargs):
  52. self.slug = slugify(self.number)
  53. super(Group, self).save(*args, **kwargs)
  54.  
  55.  
  56.  
  57. class Cabinet(models.Model):
  58. '''Model with cabinets and their status'''
  59. number = models.CharField(max_length=5)
  60. is_free = models.BooleanField(default=True)
  61.  
  62. class Meta:
  63. verbose_name='Кабинет'
  64. verbose_name_plural='Кабинеты'
  65.  
  66. def __str__(self):
  67. return f'Кабинет {self.number}'
  68.  
  69.  
  70. class Class(models.Model):
  71. '''Model with name of academic classes'''
  72. name = models.CharField(max_length=25)
  73.  
  74. class Meta:
  75. verbose_name='Пара'
  76. verbose_name_plural='Пары'
  77.  
  78. def __str__(self):
  79. return self.name
  80.  
  81.  
  82. class Timetable(models.Model):
  83. '''Model integraated all other models'''
  84. day = models.ForeignKey(Day, related_name='timetables', on_delete=models.CASCADE)
  85. group = models.ForeignKey(Group, related_name='timetables', on_delete=models.CASCADE)
  86. cabinet = models.ForeignKey(Cabinet, related_name='timetables', on_delete=models.CASCADE)
  87. name_of_class = models.ForeignKey(Class, related_name='timetables', on_delete=models.CASCADE)
  88. number_of_class = models.PositiveSmallIntegerField()
  89.  
  90. class Meta:
  91. verbose_name='Расписание'
  92. verbose_name_plural='Расписание'
  93.  
  94. def __str__(self):
  95. return f'{self.day.day} - {self.group.number} - {self.name_of_class.name}'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement