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