from ajaxdatatable.admin import AjaxDatatable from django.contrib import admin from django.db.models import Count from django.utils.safestring import mark_safe from django.utils.html import format_html from django.urls import reverse, path from apps.course.models import Lesson from apps.quiz.models import Quiz from .question import QuestionAdminInline @admin.register(Quiz) class QuizAdmin(AjaxDatatable): search_fields = ['title', 'lesson__title'] list_display = ['title', 'description','lesson','each_question_timing', '_status', '_questions',] autocomplete_fields = ['lesson',] list_filter = ['each_question_timing',] inlines = [QuestionAdminInline,] def get_queryset(self, request): queryset = super().get_queryset(request) if request.user.groups.filter(name="Professor Group").exists(): return queryset.filter(lesson__course__professor=request.user) return queryset def get_form(self, request, obj=None, **kwargs): form = super().get_form(request, obj, **kwargs) if obj is None: form.base_fields['lesson'].queryset = Lesson.objects.all() if request.user.is_staff else Lesson.objects.filter(course__professor=request.user) form.base_fields['lesson'].widget.can_add_related = False return form @admin.display(description='Status', ordering='status') def _status(self, obj): if obj.status: return mark_safe("Active") return mark_safe("Inactive") @admin.display(description='Questions', ordering='questions_count') def _questions(self, obj): return mark_safe(f"Questions: {obj.questions_count}") def get_queryset(self, request): return super().get_queryset(request).annotate( questions_count=Count('questions') )