Add CidUserExam management features: forms, views, and templates for exam records

This commit is contained in:
Ross
2025-12-22 11:13:29 +00:00
parent 9fd5e56356
commit a1bc96f99a
6 changed files with 122 additions and 11 deletions
+38
View File
@@ -110,6 +110,26 @@ from .models import (
)
@user_is_cid_user_manager
def cid_user_exam_partial(request, app_name: str, exam_id: int, cid: int):
"""Return an HTMX partial showing details for a CidUserExam record.
Matches by content_type app_label and object_id (exam id), and cid value.
"""
# Find the matching CidUserExam
try:
cux = CidUserExam.objects.select_related("cid_user", "user_user", "content_type").filter(
content_type__app_label=app_name, object_id=exam_id, cid_user__cid=cid
).first()
except Exception:
cux = None
if not cux:
return HttpResponse("No record found", status=404)
return render(request, "generic/partials/ciduserexam_detail_partial.html", {"cid_user_exam": cux})
from rapids.models import (
Rapid as RapidQuestion,
ExamQuestionDetail as RapidsExamQuestionDetail,
@@ -5295,6 +5315,8 @@ class CidUserUpdate(CidManagerRequiredMixin, UpdateView):
class CidUserExamUpdate(CidManagerRequiredMixin, UpdateView):
# This view edits the CidUser (which stores which exams the CID is registered for).
# Keep model as `CidUser` so existing URL `update_cid_exams` continues to work.
model = CidUser
form_class = CidUserExamForm
template_name = "generic/ciduserexam_form.html"
@@ -5316,6 +5338,22 @@ class CidUserGroupCreate(RevisionMixin, CidManagerRequiredMixin, CreateView):
form_class = CidUserGroupForm
class CidUserExamRecordUpdate(CidManagerRequiredMixin, UpdateView):
"""Update a CidUserExam record (individual exam record for a CID/user).
Separate from `CidUserExamUpdate` which edits a `CidUser`'s exam memberships.
"""
model = CidUserExam
form_class = None
template_name = "generic/ciduserexam_record_form.html"
def get_form_class(self):
# import locally to avoid circular imports at module import time
from .forms import CidUserExamRecordForm
return CidUserExamRecordForm
class CidUserGroupUpdate(RevisionMixin, CidManagerRequiredMixin, UpdateView):
model = CidUserGroup
form_class = CidUserGroupForm