Refactor collection case navigation and question handling

- Updated links in collection_case_priors.html to point to the new collection_case_questions view.
- Modified collection_case_view_take.html to display case history using the new method.
- Changed collection_detail.html to include links to the new collection_case_questions view.
- Added new URL pattern for collection_case_questions in urls.py.
- Refactored collection_case_details view to handle question-related logic and rendering.
- Introduced new CaseQuestionForm for handling question submissions.
- Created new migration to add override_history and redact_history fields to CaseDetail model.
- Added new templates for collection_case_details.html and collection_case_questions.html to manage case questions.
- Enhanced JavaScript functionality for dynamic question management in collection_case_questions.html.
- Updated useranswer model fields in shorts app to improve feedback and scoring.
This commit is contained in:
Ross
2025-09-15 11:17:57 +01:00
parent 779559997e
commit b9f6b7c837
11 changed files with 231 additions and 23 deletions
+40 -8
View File
@@ -51,6 +51,7 @@ from .forms import (
CaseCollectionForm,
CaseCollectionUpdateCaseForm,
CaseDetailForm,
CaseQuestionForm,
CaseDisplaySetForm,
CaseForm,
CaseResourceFormSet,
@@ -2227,7 +2228,7 @@ def collection_case_priors(request, exam_id, case_id):
@user_is_collection_author_or_atlas_editor
def collection_case_details(request, exam_id, case_id):
def collection_case_questions(request, exam_id, case_id):
case_detail = CaseDetail.objects.get(case=case_id, collection=exam_id)
collection = case_detail.collection
@@ -2244,10 +2245,10 @@ def collection_case_details(request, exam_id, case_id):
example_form = JsonAnswerForm(
request.POST, question_schema=case_detail.question_schema
)
form = CaseDetailForm(instance=case_detail)
form = CaseQuestionForm(instance=case_detail)
# Called if the user saves the main form
elif request.POST.get("submit") == "save":
form = CaseDetailForm(request.POST, instance=case_detail)
form = CaseQuestionForm(request.POST, instance=case_detail)
if form.is_valid():
form.save()
# Add any additional logic or redirection here
@@ -2277,11 +2278,11 @@ def collection_case_details(request, exam_id, case_id):
post_data, question_schema=case_detail.question_schema
)
form = CaseDetailForm(instance=case_detail)
form = CaseQuestionForm(instance=case_detail)
# This shouldn't happen
else:
assert False
form = CaseDetailForm(request.POST, instance=case_detail)
form = CaseQuestionForm(request.POST, instance=case_detail)
else:
post_data = request.POST.copy()
@@ -2290,7 +2291,7 @@ def collection_case_details(request, exam_id, case_id):
post_data, question_schema=case_detail.question_schema
)
form = CaseDetailForm(instance=case_detail)
form = CaseQuestionForm(instance=case_detail)
pass
# post_data = None
@@ -2313,7 +2314,7 @@ def collection_case_details(request, exam_id, case_id):
# case_detail.question_answers = answers
# example_form = JsonAnswerForm(post_data, question_schema=case_detail.question_schema)
# form = CaseDetailForm(instance=case_detail)
# form = CaseQuestionForm(instance=case_detail)
# blank_form = JsonAnswerForm(question_schema=case_detail.question_schema)
case_number, case_count = collection.get_index_of_case(
@@ -2325,7 +2326,7 @@ def collection_case_details(request, exam_id, case_id):
return render(
request,
"atlas/collection_case_detail.html",
"atlas/collection_case_questions.html",
{
"case_detail": case_detail,
"form": form,
@@ -2339,6 +2340,36 @@ def collection_case_details(request, exam_id, case_id):
},
)
@user_is_collection_author_or_atlas_editor
def collection_case_details(request, exam_id, case_id):
case_detail = CaseDetail.objects.get(case=case_id, collection=exam_id)
collection = case_detail.collection
form = CaseDetailForm(instance=case_detail)
case_number, case_count = collection.get_index_of_case(
case_detail.case, case_count=True
)
previous = collection.get_previous_case(case_detail.case)
next = collection.get_next_case(case_detail.case)
return render(
request,
"atlas/collection_case_details.html",
{
"case_detail": case_detail,
"form": form,
"collection": collection,
"case": case_detail.case,
"previous": previous,
"next": next,
"collection_length": case_count,
"case_number": case_number,
},
)
@user_is_collection_author_or_atlas_editor
def collection_mark_overview(request, pk):
@@ -2768,6 +2799,7 @@ def collection_case_view_take(
"form": form,
"collection": collection,
"case": case,
"case_detail": case_detail,
"series_list": series_list,
"series_to_load": series_to_load,
"case_number": case_number,