from django.conf import settings from django.contrib.postgres.fields import ArrayField from django.db import models from model_utils import Choices from phonenumber_field.modelfields import PhoneNumberField class Invite(models.Model): owner = models.OneToOneField(to=settings.AUTH_USER_MODEL, verbose_name="Кому приглошение", null=True, unique=True) hash = models.CharField(verbose_name="Уникальный код", max_length=15, unique=True) date = models.DateTimeField(verbose_name="Дата сгорания приглошения", null=True, blank=True) class Meta: verbose_name = 'Приглошение в систему' verbose_name_plural = 'Приглошения в систему' class ResetPassword(Invite): password = models.CharField(max_length=63, verbose_name="Новый пароль, если есть") class Meta: verbose_name = "Запрос на сброс пароля" verbose_name_plural = "Запросы на сброс пароля" class Account(models.Model): GENDER_CHOICES = ( (0, 'undefined'), (1, 'male'), (2, 'female'), ) b_day = models.DateField(blank=True, null=True) # TODO birth_day city = models.CharField(max_length=63, null=True, blank=True) gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0) owner = models.OneToOneField(to=settings.AUTH_USER_MODEL, null=True) photo = models.ImageField(default='/static/default/access/default.png', upload_to='user/photo/') phone = PhoneNumberField(blank=True, null=True) def __str__(self): return self.owner.email class Meta: verbose_name = 'Дополнительная информация о пользователе' verbose_name_plural = 'Дополнительная информация о пользователе' 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="Токен курса", unique=True, 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="Токен урока", unique=True, editable=False) teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Преподователь",) date = models.DateTimeField(verbose_name='Дата зачтения задания', blank=True, null=True) class Meta: verbose_name = 'Прохождение уроков' verbose_name_plural = 'Прохождение урока' class UserAnswerBlock(models.Model): progress = models.ForeignKey(to=ProgressLesson) date = models.DateTimeField(verbose_name='Дата сдачи', auto_now_add=True) demand_token = models.UUIDField(verbose_name="Токен правила", unique=True, editable=False) checker = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Проверяющий",) class Meta: verbose_name = 'Блок ответов пользователя' verbose_name_plural = 'Блоки ответов пользователя' class UserAnswer(models.Model): block = models.ForeignKey(to=UserAnswerBlock) key = models.CharField(max_length=255, blank=True, verbose_name='Наименование поля') value = models.TextField(verbose_name='Значение в поле') STATUS = Choices('done', 'wait', 'fail') status = models.CharField(choices=STATUS, default=STATUS.done, max_length=20) class Meta: verbose_name = 'Ответ пользователя' verbose_name_plural = 'Ответы пользователя'