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.
54 lines
1.9 KiB
54 lines
1.9 KiB
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("<span class='badge badge-primary'>Active</span>")
|
|
|
|
return mark_safe("<span class='badge badge-warning'>Inactive</span>")
|
|
|
|
@admin.display(description='Questions', ordering='questions_count')
|
|
def _questions(self, obj):
|
|
return mark_safe(f"<a href='/admin/quiz/question/?quiz={obj.id}'>Questions: {obj.questions_count}</a>")
|
|
|
|
def get_queryset(self, request):
|
|
return super().get_queryset(request).annotate(
|
|
questions_count=Count('questions')
|
|
)
|