import os
from django.contrib import admin
from django import forms
from django.utils.translation import gettext_lazy as _
from django.utils.html import format_html
from unfold.admin import ModelAdmin
from unfold.decorators import display
from unfold.contrib.filters.admin import (
ChoicesDropdownFilter,
MultipleRelatedDropdownFilter,
)
from unfold.widgets import UnfoldAdminRadioSelectWidget
from utils.admin import project_admin_site
from .professor_base import CourseRelatedAdmin
from apps.course.models.lesson import Lesson, CourseLesson, LessonCompletion, CourseChapter
class LessonForm(forms.ModelForm):
class Meta:
model = Lesson
fields = '__all__'
class CourseLessonForm(forms.ModelForm):
class Meta:
model = CourseLesson
fields = '__all__'
class LessonAdmin(ModelAdmin):
form = LessonForm
list_display = ('title', 'display_duration', 'content_type')
search_fields = ('title',)
ordering = ('title',)
list_filter_submit = True
fieldsets = (
(None, {
'fields': (('title', 'duration'),)
}),
(_('Content'), {
'fields': ('content_type', 'content_file', 'video_link'),
}),
)
@display(description=_("Duration"))
def display_duration(self, obj):
return format_html('{} {}', obj.duration, _("min"))
class CourseChapterAdmin(CourseRelatedAdmin):
list_display = ('title', 'course', 'priority', 'is_active')
list_filter = (
('course', MultipleRelatedDropdownFilter),
'is_active',
)
search_fields = ('title', 'course__title')
ordering = ('course', 'priority')
autocomplete_fields = ('course',)
def has_module_permission(self, request):
return False
class CourseLessonAdmin(CourseRelatedAdmin):
form = CourseLessonForm
# Change 'course' to 'chapter' in list_display and ordering
list_display = ('title', 'chapter', 'display_duration', 'is_active', 'priority')
list_filter = (
('chapter__course', MultipleRelatedDropdownFilter),
('chapter', MultipleRelatedDropdownFilter),
'is_active',
)
search_fields = ('title', 'chapter__title', 'chapter__course__title')
ordering = ('chapter__course', 'chapter', 'priority')
# Change 'course' to 'chapter' in autocomplete_fields
autocomplete_fields = ('chapter', 'lesson')
list_filter_submit = True
def has_module_permission(self, request):
return False
fieldsets = (
(None, {
# Removed 'course', added 'chapter'
'fields': ('chapter', 'lesson', 'title', ('priority', 'is_active'))
}),
)
@display(description=_("Duration"))
def display_duration(self, obj):
return format_html('{} {}', obj.lesson.duration, _("min"))
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.order_by('chapter__course', 'chapter', 'priority')
class LessonCompletionAdmin(ModelAdmin):
list_display = ('student', 'course_lesson', 'completed_at')
search_fields = ('student__fullname', 'student__email', 'course_lesson__title', 'course_lesson__course__title')
list_filter = ('course_lesson__course', 'completed_at')
ordering = ('-completed_at',)
def get_readonly_fields(self, request, obj=None):
if obj:
return ['student', 'course_lesson', 'completed_at']
return []
from django.contrib import admin as django_admin
django_admin.site.register(Lesson, LessonAdmin)
project_admin_site.register(Lesson, LessonAdmin)
project_admin_site.register(CourseChapter, CourseChapterAdmin)
project_admin_site.register(CourseLesson, CourseLessonAdmin)
project_admin_site.register(LessonCompletion, LessonCompletionAdmin)