diff --git a/courses/models.py b/courses/models.py index c090554..bf0ad21 100755 --- a/courses/models.py +++ b/courses/models.py @@ -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') diff --git a/progress/migrations/0003_remove_progress_active_lesson.py b/progress/migrations/0003_remove_progress_active_lesson.py new file mode 100644 index 0000000..4bfb4b4 --- /dev/null +++ b/progress/migrations/0003_remove_progress_active_lesson.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2018-02-02 15:32 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('progress', '0002_auto_20180202_1414'), + ] + + operations = [ + migrations.RemoveField( + model_name='progress', + name='active_lesson', + ), + ] diff --git a/progress/models.py b/progress/models.py index 2263175..b9261ce 100644 --- a/progress/models.py +++ b/progress/models.py @@ -14,7 +14,6 @@ class Progress(models.Model): related_name='teacher_progress') user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='Студент') course_token = models.UUIDField(verbose_name="Токен курса", editable=False) - active_lesson = models.UUIDField(verbose_name="Токен активного урока", blank=True, null=True) def progress_status(self, sorted_token_list): """ diff --git a/progress/tasks.py b/progress/tasks.py index 1f8d6e4..8d4d2a6 100644 --- a/progress/tasks.py +++ b/progress/tasks.py @@ -8,8 +8,6 @@ def add_next_lesson(progress): [i.lesson_token for i in progress.progresslesson_set.all()] ) - last_lesson = None - for lesson, is_hw in lesson_list: if is_hw: ProgressLesson.objects.get( @@ -23,8 +21,5 @@ def add_next_lesson(progress): lesson_token=lesson, checker=progress.user, ) - last_lesson = lesson - progress.active_lesson = last_lesson - progress.save() return "access update course %s" % progress.course_token diff --git a/progress/views.py b/progress/views.py index 330523e..3c26492 100644 --- a/progress/views.py +++ b/progress/views.py @@ -97,7 +97,7 @@ class UpdateProgress(APIView): elif pv.checker == p.user: pv.status = ProgressLesson.STATUSES.done else: - raise ValueError("Этого никогда не должнопроисходить но я уверен, что произойдёт") + raise ValueError("Этого никогда не должно происходить, но я уверен, что произойдёт") elif not is_student and pv.status == ProgressLesson.STATUSES.wait: pv.status = action