from django.db import models from course_service.maps.exeptions import MapTypeError from lms.global_decorators import transaction_decorator class CourseRoute(models.Model): """ Объединение нескольких мап курса, одназначно определяет способ прохождения по курсу. """ out_key = models.CharField(max_length=15, unique=True, verbose_name="Ключ для внешних сервисов", editable=False) name = models.CharField(max_length=255, verbose_name='Имя шаблона') is_template = models.BooleanField(default=True, verbose_name='Может ли быть использован как шаблон') def __str__(self): return self.name class Meta: verbose_name = 'Маршрут прохождения' verbose_name_plural = 'Маршруты прохождения' class CourseMap(models.Model): """ Способы отображения курса. Упорядочены в порядке возрастания приоретета. """ course = models.ForeignKey(to='courses.Course', verbose_name='К какому курсу привязан') name = models.CharField(max_length=255, verbose_name="Имя прохождения") def __str__(self): return '''Линейное прохождение по курсу "%s"''' % self.course.title class Meta: verbose_name = 'Карта линейного прохождения курсов' verbose_name_plural = 'Карты линейного прохождения курсов' unique_together =('course', 'name',) class PivotCourseMap(models.Model): route = models.ForeignKey(to=CourseRoute, verbose_name="К какому узлу") sort = models.SmallIntegerField(verbose_name='Порядок сортировки') map_course = models.ForeignKey(to=CourseMap, verbose_name='К какой сортировке имеетотношение') def __str__(self): return '''Карта с №%s по маршруту ID%s''' % (self.sort, self.route_id) class Meta: verbose_name = 'Порядок сортировки маршрута' verbose_name_plural = 'Порядки сортировок маршрутов' unique_together = (('map_course', 'route'), ('sort', 'route'),) ordering = ('sort',) class PivotVertex(models.Model): vertex = models.ForeignKey(to='courses.Vertex', verbose_name="К какому узлу") sort = models.SmallIntegerField(verbose_name='Порядок сортировки') map_course = models.ForeignKey(to=CourseMap, verbose_name='К какой сортировке имеетотношение') def __str__(self): return '''Карта с №%s по линейному прохождению ID%s''' % (self.sort, self.map_course_id) class Meta: verbose_name = 'Порядок сортировки узла' verbose_name_plural = 'Порядки сортировок узла' unique_together = (('map_course', 'vertex'), ('sort', 'map_course')) ordering = ('sort',)