Files
training-software/quizzes/admin.py
Paperclip CTO b59d06fddc
Some checks failed
CI / Tests (Python 3.12) (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / OpenAPI Schema (push) Has been cancelled
feat(TRA-239): implement Quiz Engine — SC/MC + short answer with deterministic randomization
- Quiz, Question, Choice, QuizAttempt, QuestionResponse models with migrations
- seed-based deterministic randomization for questions and choices per attempt
- SC/MC grading (all-or-nothing per question), short-answer regex/keyword matching
- submit_attempt: grades all responses, computes score_percent, marks passed/failed
- DRF API: start attempt, submit response, submit (finalize) attempt, quiz detail
- 25 unit + integration tests covering grading correctness, boundary conditions,
  randomization reproducibility, API flows, and access control

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-07 09:15:18 +02:00

34 lines
883 B
Python

from django.contrib import admin
from .models import Choice, Question, Quiz, QuizAttempt, QuestionResponse
class ChoiceInline(admin.TabularInline):
model = Choice
extra = 2
class QuestionInline(admin.TabularInline):
model = Question
extra = 1
show_change_link = True
@admin.register(Quiz)
class QuizAdmin(admin.ModelAdmin):
list_display = ("title", "pass_threshold", "max_attempts", "time_limit_seconds", "feedback_mode")
inlines = [QuestionInline]
@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
list_display = ("quiz", "order", "question_type", "points")
inlines = [ChoiceInline]
@admin.register(QuizAttempt)
class QuizAttemptAdmin(admin.ModelAdmin):
list_display = ("quiz", "user", "attempt_number", "status", "score_percent", "is_passed")
list_filter = ("status", "is_passed")
raw_id_fields = ("user",)