from django.conf import settings from django.contrib.postgres.fields import ArrayField from django.db import models from model_utils import Choices 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 __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) def __str__(self): return self.lesson_token class Meta: verbose_name = 'Прохождение уроков' verbose_name_plural = 'Прохождение урока' 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 = 'Ответы пользователя'