Skip to content

Commit 526cace

Browse files
committed
Добавлены модели прогрессов с ограничениями на уровне БД
1 parent 1c14f44 commit 526cace

5 files changed

Lines changed: 735 additions & 0 deletions

File tree

courses/admin.py

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
CourseModule,
1313
CourseTask,
1414
CourseTaskOption,
15+
UserCourseProgress,
16+
UserLessonProgress,
17+
UserModuleProgress,
1518
UserTaskAnswer,
1619
UserTaskAnswerFile,
1720
UserTaskAnswerOption,
@@ -32,6 +35,12 @@
3235
UserTaskAnswerOption._meta.verbose_name_plural = "Выбранные варианты"
3336
UserTaskAnswerFile._meta.verbose_name = "Файл"
3437
UserTaskAnswerFile._meta.verbose_name_plural = "Файлы"
38+
UserCourseProgress._meta.verbose_name = "Прогресс курса"
39+
UserCourseProgress._meta.verbose_name_plural = "Прогресс курсов"
40+
UserModuleProgress._meta.verbose_name = "Прогресс модуля"
41+
UserModuleProgress._meta.verbose_name_plural = "Прогресс модулей"
42+
UserLessonProgress._meta.verbose_name = "Прогресс урока"
43+
UserLessonProgress._meta.verbose_name_plural = "Прогресс уроков"
3544

3645
_COURSES_MODEL_ORDER = {
3746
"Course": 1,
@@ -42,6 +51,9 @@
4251
"UserTaskAnswer": 6,
4352
"UserTaskAnswerOption": 7,
4453
"UserTaskAnswerFile": 8,
54+
"UserCourseProgress": 9,
55+
"UserModuleProgress": 10,
56+
"UserLessonProgress": 11,
4557
}
4658

4759

@@ -593,3 +605,107 @@ class UserTaskAnswerFileAdmin(admin.ModelAdmin):
593605
raw_id_fields = ("answer", "file")
594606
readonly_fields = ("file_name", "file_size", "datetime_uploaded")
595607
list_select_related = ("answer", "file", "answer__user", "answer__task")
608+
609+
610+
@admin.register(UserCourseProgress)
611+
class UserCourseProgressAdmin(admin.ModelAdmin):
612+
list_display = (
613+
"id",
614+
"user",
615+
"course",
616+
"status",
617+
"percent",
618+
"started_at",
619+
"completed_at",
620+
"last_visit_at",
621+
"datetime_updated",
622+
)
623+
list_display_links = ("id",)
624+
list_filter = ("status", "course")
625+
search_fields = (
626+
"id",
627+
"user__email",
628+
"user__first_name",
629+
"user__last_name",
630+
"course__title",
631+
)
632+
raw_id_fields = ("user", "course")
633+
readonly_fields = ("datetime_created", "datetime_updated")
634+
list_select_related = ("user", "course")
635+
636+
637+
@admin.register(UserModuleProgress)
638+
class UserModuleProgressAdmin(admin.ModelAdmin):
639+
list_display = (
640+
"id",
641+
"user",
642+
"module",
643+
"get_course",
644+
"status",
645+
"percent",
646+
"started_at",
647+
"completed_at",
648+
"datetime_updated",
649+
)
650+
list_display_links = ("id",)
651+
list_filter = ("status", "module__course")
652+
search_fields = (
653+
"id",
654+
"user__email",
655+
"user__first_name",
656+
"user__last_name",
657+
"module__title",
658+
"module__course__title",
659+
)
660+
raw_id_fields = ("user", "module")
661+
readonly_fields = ("datetime_created", "datetime_updated")
662+
list_select_related = ("user", "module", "module__course")
663+
664+
@admin.display(description="Курс", ordering="module__course__title")
665+
def get_course(self, obj):
666+
return obj.module.course
667+
668+
669+
@admin.register(UserLessonProgress)
670+
class UserLessonProgressAdmin(admin.ModelAdmin):
671+
list_display = (
672+
"id",
673+
"user",
674+
"lesson",
675+
"get_module",
676+
"get_course",
677+
"status",
678+
"percent",
679+
"current_task",
680+
"started_at",
681+
"completed_at",
682+
"datetime_updated",
683+
)
684+
list_display_links = ("id",)
685+
list_filter = ("status", "lesson__module__course")
686+
search_fields = (
687+
"id",
688+
"user__email",
689+
"user__first_name",
690+
"user__last_name",
691+
"lesson__title",
692+
"lesson__module__title",
693+
"lesson__module__course__title",
694+
)
695+
raw_id_fields = ("user", "lesson", "current_task")
696+
readonly_fields = ("datetime_created", "datetime_updated")
697+
list_select_related = (
698+
"user",
699+
"lesson",
700+
"lesson__module",
701+
"lesson__module__course",
702+
"current_task",
703+
)
704+
705+
@admin.display(description="Модуль", ordering="lesson__module__title")
706+
def get_module(self, obj):
707+
return obj.lesson.module
708+
709+
@admin.display(description="Курс", ordering="lesson__module__course__title")
710+
def get_course(self, obj):
711+
return obj.lesson.module.course

0 commit comments

Comments
 (0)