start combining answers
This commit is contained in:
+46
-27
@@ -16,9 +16,9 @@ from .models import (
|
||||
CidUserAnswer,
|
||||
UserAnswer,
|
||||
Exam,
|
||||
Answers,
|
||||
HalfMarkAnswers,
|
||||
IncorrectAnswers,
|
||||
Answer,
|
||||
#HalfMarkAnswers,
|
||||
#IncorrectAnswers,
|
||||
)
|
||||
|
||||
from collections import defaultdict
|
||||
@@ -222,8 +222,8 @@ def flag_question(request):
|
||||
def loadJsonAnswer(answer):
|
||||
# As access is not restricted make sure the data appears valid
|
||||
if (not isinstance(answer["cid"],
|
||||
int)) or (not isinstance(answer["eid"], int) or
|
||||
(not isinstance(answer["ans"], str))):
|
||||
int)) or (not isinstance(answer["eid"], int) or
|
||||
(not isinstance(answer["ans"], str))):
|
||||
return JsonResponse({"success": False})
|
||||
|
||||
# The model should catch invalid data but this should be less intensive
|
||||
@@ -235,14 +235,13 @@ def loadJsonAnswer(answer):
|
||||
|
||||
if not exam.active:
|
||||
return JsonResponse({
|
||||
"success":
|
||||
False,
|
||||
"error":
|
||||
"No active exam: {}".format(answer["eid"])
|
||||
"success": False,
|
||||
"error": "No active exam: {}".format(answer["eid"])
|
||||
})
|
||||
|
||||
exiting_answers = CidUserAnswer.objects.filter(
|
||||
question__id=answer["qid"], exam__id=answer["eid"], cid=answer["cid"])
|
||||
exiting_answers = CidUserAnswer.objects.filter(question__id=answer["qid"],
|
||||
exam__id=answer["eid"],
|
||||
cid=answer["cid"])
|
||||
|
||||
if not exiting_answers:
|
||||
ans = CidUserAnswer(answer=answer["ans"], cid=answer["cid"])
|
||||
@@ -311,18 +310,35 @@ def mark(request, pk, sk):
|
||||
except IndexError:
|
||||
raise Http404("Exam question does not exist")
|
||||
|
||||
correct_answers = [i.answer.lower() for i in question.answers.all()]
|
||||
half_correct_answers = [i.answer.lower() for i in question.half_mark_answers.all()]
|
||||
incorrect_answers = [i.answer.lower() for i in question.incorrect_answers.all()]
|
||||
answers_dict = {}
|
||||
|
||||
for ans in question.answer.all():
|
||||
answers_dict[ans.get_compare_string()] = ans
|
||||
|
||||
marked_answers_set = set(answers_dict.keys())
|
||||
|
||||
#correct_answers = [i.answer.lower() for i in question.answers.all()]
|
||||
#half_correct_answers = [
|
||||
# i.answer.lower() for i in question.half_mark_answers.all()
|
||||
#]
|
||||
#incorrect_answers = [
|
||||
# i.answer.lower() for i in question.incorrect_answers.all()
|
||||
#]
|
||||
|
||||
# It's probably better to do some processing/checking in the model
|
||||
user_answers = (set([
|
||||
i.answer.lower()
|
||||
for i in question.cid_user_answers.all() if i.strip() != ""
|
||||
]) - marked_answers_set) # .filter(user=User)
|
||||
|
||||
|
||||
|
||||
user_answers = (set([i.answer.lower() for i in question.cid_user_answers.all()]) -
|
||||
set(correct_answers) - set(half_correct_answers) -
|
||||
set(incorrect_answers)) # .filter(user=User)
|
||||
user_answers = set([i for i in user_answers if i.strip() != ""])
|
||||
if request.method == "POST":
|
||||
|
||||
form = MarkAnatomyQuestionForm(request.POST)
|
||||
|
||||
# *******************************
|
||||
# TODO: convert to JSON request
|
||||
# *******************************
|
||||
if form.is_valid():
|
||||
cd = form.cleaned_data
|
||||
# correct = cd.get("correct")
|
||||
@@ -389,23 +405,25 @@ def mark(request, pk, sk):
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
def active_exams(request):
|
||||
exams = Exam.objects.all()
|
||||
print(exams)
|
||||
|
||||
active_exams = {
|
||||
"exams" : []
|
||||
}
|
||||
active_exams = {"exams": []}
|
||||
|
||||
for exam in exams:
|
||||
if exam.active:
|
||||
active_exams["exams"].append({
|
||||
"name": exam.get_exam_name(),
|
||||
"url": request.build_absolute_uri(exam.get_json_url()),
|
||||
"name":
|
||||
exam.get_exam_name(),
|
||||
"url":
|
||||
request.build_absolute_uri(exam.get_json_url()),
|
||||
})
|
||||
|
||||
return JsonResponse(active_exams)
|
||||
|
||||
|
||||
def exam_json(request, pk):
|
||||
exam = get_object_or_404(Exam, pk=pk)
|
||||
|
||||
@@ -462,10 +480,11 @@ def exam_scores_cid(request, pk):
|
||||
continue
|
||||
|
||||
ans = s[0].answer
|
||||
if ans.lower() in q.answers.all().values_list(Lower("answer"), flat=True):
|
||||
if ans.lower() in q.answers.all().values_list(Lower("answer"),
|
||||
flat=True):
|
||||
a = 2
|
||||
elif ans.lower() in q.half_mark_answers.all().values_list(Lower("answer"),
|
||||
flat=True):
|
||||
elif ans.lower() in q.half_mark_answers.all().values_list(
|
||||
Lower("answer"), flat=True):
|
||||
a = 1
|
||||
else:
|
||||
a = 0
|
||||
|
||||
Reference in New Issue
Block a user