You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
3.3 KiB
69 lines
3.3 KiB
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='Имя шаблона', blank=True, null=True)
|
|
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="Имя прохождения", default="Линейное прохождение")
|
|
|
|
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='К какой сортеровке имеетотношение', blank=True,
|
|
null=True)
|
|
|
|
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='К какой сортеровке имеетотношение', blank=True,
|
|
null=True)
|
|
|
|
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',)
|
|
|