from django.conf import settings from django.contrib.postgres.fields import ArrayField from django.db import models from model_utils import Choices from courses.api import CourseProgressApi class Progress(models.Model): hidden_lessons = ArrayField( models.UUIDField(verbose_name="Токен урока", unique=True, editable=False), default=[], verbose_name='Список скрытых уроков', ) teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Преподователь по умолчанию", related_name='teacher_progress') user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='Студент') course_token = models.UUIDField(verbose_name="Токен курса", editable=False) def progress_status(self, sorted_token_list): """ Возвращает порядок активной темы и урока или ничего :return: (topic_sort, lesson_sort) or None """ token_list = [i.lesson_token for i in self.progresslesson_set.filter(status='done')] x = (1, 1) for idx_topic, lesson_list in enumerate(sorted_token_list): for idx_lesson, lesson_token in enumerate(lesson_list): if lesson_token in token_list: x = None elif x is None: x = (idx_topic+1, idx_lesson+1) return x def __str__(self): return '%s' % (self.user.email,) class Meta: verbose_name = 'Прогресс пользователя' verbose_name_plural = 'Прогресс пользователя' unique_together = (("user", "course_token"),) class ProgressLesson(models.Model): progress = models.ForeignKey(to=Progress) lesson_token = models.UUIDField(verbose_name="Токен урока", editable=False) teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Преподователь",) date = models.DateTimeField(verbose_name='Дата зачтения задания', blank=True, null=True) STATUSES = Choices('done', 'wait', 'fail') status = models.CharField(choices=STATUSES, default=STATUSES.wait, max_length=20) comment_tokens = ArrayField(models.UUIDField(verbose_name="Токен комента", editable=False), default=[]) def __str__(self): return self.progress.user.email class Meta: verbose_name = 'Прохождение уроков' verbose_name_plural = 'Прохождение урока' unique_together = ('progress', 'lesson_token') # class UserLessonAnswer(models.Model): # progress_lesson = models.ForeignKey(to=ProgressLesson) # date = models.DateTimeField(verbose_name='Дата сдачи', auto_now_add=True) # reviewer = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Проверяющий",) # # class Meta: # verbose_name = 'Блок ответов пользователя' # verbose_name_plural = 'Блоки ответов пользователя' # # # class AnswerItem(models.Model): # STATUSES = Choices('done', 'wait', 'fail') # # lesson_answer = models.ForeignKey(to=UserLessonAnswer) # question = models.TextField(verbose_name='Вопрос') # TODO подумать над хранением токена вопроса # value = models.TextField(verbose_name='Ответ') # comment = models.TextField(verbose_name='Комент', blank=True, null=True) # status = models.CharField(choices=STATUSES, default=STATUSES.wait, max_length=20) # # class Meta: # verbose_name = 'Ответ пользователя' # verbose_name_plural = 'Ответы пользователя'