You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

87 lines
3.0 KiB

from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from unfold.admin import ModelAdmin
from unfold.contrib.filters.admin import (
ChoicesDropdownFilter,
MultipleRelatedDropdownFilter,
RangeDateFilter,
)
from utils.admin import project_admin_site
from apps.course.models import (
CourseLiveSession,
LiveSessionRecording,
LiveSessionUser,
USER_ROLE_CHOICES,
RECORDING_TYPE_CHOICES,
)
class CourseLiveSessionAdmin(ModelAdmin):
list_display = ("subject", "course", "started_at", "ended_at", "created_at")
list_filter = (
("course", MultipleRelatedDropdownFilter),
("started_at", RangeDateFilter),
)
search_fields = ("subject", "course__title")
ordering = ("-started_at",)
autocomplete_fields = ("course",)
readonly_fields = ("created_at", "updated_at")
fieldsets = (
(None, {"fields": ("course", "subject", "started_at", "ended_at")}),
(_("Timestamps"), {"fields": ("created_at", "updated_at")}),
)
class LiveSessionUserAdmin(ModelAdmin):
list_display = ("user", "session", "role", "is_online", "entered_at", "exited_at")
list_filter = (
("session", MultipleRelatedDropdownFilter),
("user", MultipleRelatedDropdownFilter),
("role", ChoicesDropdownFilter),
("entered_at", RangeDateFilter),
("is_online", admin.BooleanFieldListFilter),
)
search_fields = (
"user__email",
"user__fullname",
"session__subject",
)
autocomplete_fields = ("user", "session")
readonly_fields = ("created_at", "updated_at")
fieldsets = (
(None, {"fields": ("session", "user", "role")}),
(_("Session Timing"), {"fields": ("entered_at", "exited_at", "is_online")}),
(_("Timestamps"), {"fields": ("created_at", "updated_at")}),
)
def get_role_choices(self, request):
return USER_ROLE_CHOICES
class LiveSessionRecordingAdmin(ModelAdmin):
list_display = ("title", "session", "recording_type", "is_active", "created_at")
list_filter = (
("session", MultipleRelatedDropdownFilter),
("recording_type", ChoicesDropdownFilter),
("created_at", RangeDateFilter),
("is_active", admin.BooleanFieldListFilter),
)
search_fields = ("title", "session__subject", "session__course__title")
autocomplete_fields = ("session",)
readonly_fields = ("created_at", "updated_at")
fieldsets = (
(None, {"fields": ("session", "title", "recording_type")}),
(_("Files"), {"fields": ("file", "file_time", "thumbnail")}),
(_("Status"), {"fields": ("is_active",)}),
(_("Timestamps"), {"fields": ("created_at", "updated_at")}),
)
def get_recording_type_choices(self, request):
return RECORDING_TYPE_CHOICES
project_admin_site.register(CourseLiveSession, CourseLiveSessionAdmin)
project_admin_site.register(LiveSessionUser, LiveSessionUserAdmin)
project_admin_site.register(LiveSessionRecording, LiveSessionRecordingAdmin)