improve json editing

This commit is contained in:
Ross
2024-06-10 09:59:43 +01:00
parent bdde50effc
commit 9026ee5390
10 changed files with 155 additions and 9 deletions
+66 -3
View File
@@ -47,6 +47,7 @@ from .forms import (
ConditionAutocompleteForm,
ConditionForm,
FindingForm,
JsonAnswerForm,
ResourceForm,
SelfReviewForm,
SeriesAuthorForm,
@@ -1566,18 +1567,51 @@ def collection_take_start(request, pk):
def collection_case_details(request, exam_id, case_id):
case_detail = CaseDetail.objects.get(case=case_id, collection=exam_id)
if request.method == 'POST':
if request.method == 'POST' and request.POST.get('submit') == 'answer':
#answers = request.POST
case_detail.question_answers = json.loads(request.POST.get("json_answer"))
case_detail.save()
example_form = JsonAnswerForm(request.POST, case_detail=case_detail)
else:
post_data = None
if case_detail.question_schema is not None and case_detail.question_answers is not None:
question_keys = set(case_detail.question_schema["properties"].keys())
answer_keys = set(case_detail.question_answers.keys())
answers = {}
for key, value in case_detail.question_answers.items():
if key in question_keys:
answers[key] = value
diff = question_keys - answer_keys
for key in diff:
answers[key] = ""
post_data = request.POST.copy()
post_data["json_answer"]= json.dumps(answers)
example_form = JsonAnswerForm(post_data, case_detail=case_detail)
if request.method == 'POST' and request.POST.get('submit') == 'save':
form = CaseDetailForm(request.POST, instance=case_detail)
if form.is_valid():
form.save()
# Add any additional logic or redirection here
else:
form = CaseDetailForm(instance=case_detail)
blank_form = JsonAnswerForm(case_detail=case_detail)
return render(
request, "atlas/collection_case_detail.html", {"case_detail": case_detail,
"form": form}
"form": form, "example_form": example_form,
"blank_form": blank_form}
)
@user_is_collection_author_or_atlas_editor
@@ -1790,6 +1824,35 @@ def collection_take_overview(
},
)
def collection_case_view_take_user_answers(request, pk: int, case_number: int):
return collection_case_view_take_answers(request, pk, case_number)
def collection_case_view_take_answers(
request, pk: int, case_number: int, cid=None, passcode=None
):
"""
"""
collection = get_object_or_404(CaseCollection, pk=pk)
collection.check_user_can_take(cid, passcode, request.user)
case, case_count = collection.get_case_by_index(case_number, case_count=True)
cid_user_exam = collection.get_or_create_cid_user_exam(
cid=cid, user_user=request.user
)
case_detail = CaseDetail.objects.get(case=case, collection=collection)
return render(
request,
"atlas/collection_case_view_take_answers.html",
{
"collection": collection,
"case": case,
"case_detail": case_detail,
},
)
def collection_case_view_take_user(request, pk: int, case_number: int):
return collection_case_view_take(request, pk, case_number)