|
|
|
|
@ -26,6 +26,46 @@ COURSE_DIRECTION = ( |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Lesson(models.Model): |
|
|
|
|
token = models.UUIDField(verbose_name="Токен", default=uuid.uuid4, editable=False) |
|
|
|
|
key = models.UUIDField( |
|
|
|
|
verbose_name="Внутрений ключ используется для расшивровки", default=uuid.uuid4, editable=False) |
|
|
|
|
topic = models.ForeignKey(to="Topic", verbose_name='Тема') |
|
|
|
|
title = models.CharField(verbose_name='Название', max_length=255) |
|
|
|
|
description = models.TextField(verbose_name='Описание', blank=True, null=True) |
|
|
|
|
video = models.TextField(verbose_name='Код видео', blank=True, null=True) |
|
|
|
|
material_tokens = ArrayField( |
|
|
|
|
models.UUIDField(verbose_name="Токен материала", editable=False), |
|
|
|
|
default=[], |
|
|
|
|
verbose_name='Материалы курса', |
|
|
|
|
) |
|
|
|
|
free = models.BooleanField(default=False, verbose_name='Привилегии для узла не будут проверяться') |
|
|
|
|
sort = models.SmallIntegerField(unique=True) |
|
|
|
|
|
|
|
|
|
is_hm = models.BooleanField(default=False) #TODO костыли |
|
|
|
|
old_id = models.IntegerField(null=True, blank=True) |
|
|
|
|
|
|
|
|
|
def __str__(self): |
|
|
|
|
return self.title |
|
|
|
|
|
|
|
|
|
class Meta: |
|
|
|
|
verbose_name = "Урок" |
|
|
|
|
verbose_name_plural = "Уроки" |
|
|
|
|
ordering = ('sort', ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Topic(models.Model): |
|
|
|
|
course = models.ForeignKey(to="Course", verbose_name='курс') |
|
|
|
|
title = models.CharField(verbose_name='Название', max_length=255) |
|
|
|
|
description = models.TextField(verbose_name='Описание', blank=True, null=True) |
|
|
|
|
icon = models.ImageField(verbose_name='Иконка темы', null=True, blank=True) |
|
|
|
|
sort = models.SmallIntegerField(unique=True) |
|
|
|
|
|
|
|
|
|
class Meta: |
|
|
|
|
verbose_name = "Тема" |
|
|
|
|
verbose_name_plural = "Темы" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CourseManager(models.Manager): |
|
|
|
|
|
|
|
|
|
def update_or_create_course(self, image=None, big_image=None, id=0, |
|
|
|
|
@ -97,6 +137,20 @@ class Course(models.Model): |
|
|
|
|
lesson_list += list(topic.lesson_set.all()) |
|
|
|
|
return lesson_list |
|
|
|
|
|
|
|
|
|
def get_next(self, lesson: Lesson) -> Lesson: |
|
|
|
|
lessons = self.get_lesson_list() |
|
|
|
|
try: |
|
|
|
|
return lessons[lessons.index(lesson)] |
|
|
|
|
except IndexError: |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def get_first(self) -> Lesson: |
|
|
|
|
lessons = self.get_lesson_list() |
|
|
|
|
try: |
|
|
|
|
return lessons[0] |
|
|
|
|
except IndexError: |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
objects = CourseManager() |
|
|
|
|
|
|
|
|
|
class Meta: |
|
|
|
|
@ -104,46 +158,6 @@ class Course(models.Model): |
|
|
|
|
verbose_name_plural = "Курсы" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Topic(models.Model): |
|
|
|
|
course = models.ForeignKey(to=Course, verbose_name='курс') |
|
|
|
|
title = models.CharField(verbose_name='Название', max_length=255) |
|
|
|
|
description = models.TextField(verbose_name='Описание', blank=True, null=True) |
|
|
|
|
icon = models.ImageField(verbose_name='Иконка темы', null=True, blank=True) |
|
|
|
|
sort = models.SmallIntegerField(unique=True) |
|
|
|
|
|
|
|
|
|
class Meta: |
|
|
|
|
verbose_name = "Тема" |
|
|
|
|
verbose_name_plural = "Темы" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Lesson(models.Model): |
|
|
|
|
token = models.UUIDField(verbose_name="Токен", default=uuid.uuid4, editable=False) |
|
|
|
|
key = models.UUIDField( |
|
|
|
|
verbose_name="Внутрений ключ используется для расшивровки", default=uuid.uuid4, editable=False) |
|
|
|
|
topic = models.ForeignKey(to=Topic, verbose_name='Тема') |
|
|
|
|
title = models.CharField(verbose_name='Название', max_length=255) |
|
|
|
|
description = models.TextField(verbose_name='Описание', blank=True, null=True) |
|
|
|
|
video = models.TextField(verbose_name='Код видео', blank=True, null=True) |
|
|
|
|
material_tokens = ArrayField( |
|
|
|
|
models.UUIDField(verbose_name="Токен материала", editable=False), |
|
|
|
|
default=[], |
|
|
|
|
verbose_name='Материалы курса', |
|
|
|
|
) |
|
|
|
|
free = models.BooleanField(default=False, verbose_name='Привилегии для узла не будут проверяться') |
|
|
|
|
sort = models.SmallIntegerField(unique=True) |
|
|
|
|
|
|
|
|
|
is_hm = models.BooleanField(default=False) #TODO костыли |
|
|
|
|
old_id = models.IntegerField(null=True, blank=True) |
|
|
|
|
|
|
|
|
|
def __str__(self): |
|
|
|
|
return self.title |
|
|
|
|
|
|
|
|
|
class Meta: |
|
|
|
|
verbose_name = "Урок" |
|
|
|
|
verbose_name_plural = "Уроки" |
|
|
|
|
ordering = ('sort', ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# class LessonRequirement(models.Model): |
|
|
|
|
# lesson = models.ForeignKey(to=Lesson) |
|
|
|
|
# requirement = models.ForeignKey(to='courses.Requirement') |
|
|
|
|
|