parent
8d695f1d18
commit
3826ac2037
16 changed files with 231 additions and 331 deletions
@ -1,11 +1,9 @@ |
||||
from django.contrib import admin |
||||
from access.models.other import Invite, Account, ResetPassword, UserActivity |
||||
from access.models.progress import ProgressLesson |
||||
from access.models.user import User |
||||
|
||||
admin.site.register(User) |
||||
admin.site.register(Account) |
||||
admin.site.register(Invite) |
||||
admin.site.register(ResetPassword) |
||||
admin.site.register(ProgressLesson) |
||||
admin.site.register(UserActivity) |
||||
|
||||
@ -1,88 +0,0 @@ |
||||
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 = 'Ответы пользователя' |
||||
@ -1,6 +1,8 @@ |
||||
from django.contrib import admin |
||||
|
||||
# Register your models here. |
||||
from progress.models import Progress |
||||
from progress.models import ProgressLesson, Progress |
||||
|
||||
|
||||
admin.site.register(Progress) |
||||
admin.site.register(ProgressLesson) |
||||
|
||||
@ -1,32 +1,44 @@ |
||||
from rest_framework import serializers |
||||
|
||||
from .models import PivotProgressVertex, Progress |
||||
from progress.models import ProgressLesson, Progress |
||||
|
||||
|
||||
class PivotProgressSerializer(serializers.ModelSerializer): |
||||
status = serializers.SerializerMethodField() |
||||
class ProgressLessonSerializer(serializers.ModelSerializer): |
||||
teacher = serializers.SerializerMethodField() |
||||
|
||||
class Meta: |
||||
model = PivotProgressVertex |
||||
model = ProgressLesson |
||||
exclude = ('id', 'progress') |
||||
|
||||
@staticmethod |
||||
def get_status(self): |
||||
return self.get_status_display() |
||||
|
||||
@staticmethod |
||||
def get_teacher(self): |
||||
return self.teacher.get_full_name() |
||||
|
||||
|
||||
class ProgressAnalyticSerializer(serializers.ModelSerializer): |
||||
name = serializers.SerializerMethodField() |
||||
email = serializers.SerializerMethodField() |
||||
|
||||
class Meta: |
||||
model = Progress |
||||
fields = ('name', 'email',) |
||||
|
||||
@staticmethod |
||||
def get_name(self): |
||||
return self.user.get_full_name() |
||||
|
||||
@staticmethod |
||||
def get_email(self): |
||||
return self.user.email |
||||
|
||||
|
||||
class ProgressSerializer(serializers.ModelSerializer): |
||||
vertexes = serializers.SerializerMethodField() |
||||
lessons = serializers.SerializerMethodField() |
||||
|
||||
class Meta: |
||||
model = Progress |
||||
fields = ('route', 'vertexes', 'course') |
||||
fields = ('lessons', 'course_token') |
||||
|
||||
@staticmethod |
||||
def get_vertexes(self): |
||||
return [PivotProgressSerializer(i).data for i in self.pivotprogressvertex_set.all()] |
||||
def get_lessons(self): |
||||
return [ProgressLessonSerializer(i).data for i in self.progresslesson_set.all()] |
||||
|
||||
Loading…
Reference in new issue