unify generic exam views naming

This commit is contained in:
Ross
2021-12-19 10:08:07 +00:00
parent b823e0a897
commit 889db68a08
12 changed files with 194 additions and 133 deletions
+29 -15
View File
@@ -47,6 +47,7 @@ from django.core.exceptions import PermissionDenied
from .tables import QuestionTable, UserAnswerTable
from .filters import QuestionFilter, UserAnswerFilter
class AuthorOrCheckerRequiredMixin(object):
def get_object(self, *args, **kwargs):
obj = super().get_object(*args, **kwargs)
@@ -56,6 +57,7 @@ class AuthorOrCheckerRequiredMixin(object):
raise PermissionDenied() # or Http404
return obj
def question_list(request):
questions = Question.objects.all()
return render(request, "sbas/question_list.html", {"questions": questions})
@@ -109,9 +111,17 @@ def exam_scores_cid(request, pk):
s = q.cid_user_answers.filter(cid=cid, exam__id=pk).first()
if not s:
# skip if no answer
user_answers_marks[cid].append((0,0,0,0,0))
user_answers_marks[cid].append((0, 0, 0, 0, 0))
user_answers[cid].append(("", "", "", "", ""))
by_question[q].append((("", 0),("", 0),("", 0),("", 0),("", 0),))
by_question[q].append(
(
("", 0),
("", 0),
("", 0),
("", 0),
("", 0),
)
)
continue
ans = s.get_answer()
@@ -191,7 +201,6 @@ def exam_scores_cid_user(request, pk, sk, passcode):
answers_marks = []
answers = []
view_all_results = False
if request.user.groups.filter(name="view_all_results").exists():
view_all_results = True
@@ -200,7 +209,6 @@ def exam_scores_cid_user(request, pk, sk, passcode):
# Get user answer
user_answer = q.cid_user_answers.filter(cid=cid).first()
if user_answer is None:
answer_score = 0
ans = ""
@@ -229,7 +237,7 @@ def exam_scores_cid_user(request, pk, sk, passcode):
{
"exam": exam,
"cid": cid,
"passcode" : passcode,
"passcode": passcode,
"questions": questions,
"answers": answers,
"answers_marks": answers_marks,
@@ -254,6 +262,7 @@ def exam_start(request, pk):
},
)
def exam_finish(request, pk, cid, passcode):
exam = get_object_or_404(Exam, pk=pk)
@@ -262,8 +271,7 @@ def exam_finish(request, pk, cid, passcode):
questions = exam.exam_questions.all()
answers = CidUserAnswer.objects.filter(
cid=cid, exam=exam)
answers = CidUserAnswer.objects.filter(cid=cid, exam=exam)
answer_question_map = {}
for ans in answers:
@@ -311,8 +319,7 @@ def exam_take(request, pk, sk, cid, passcode):
pos = exam.get_question_index(question)
answer = question.cid_user_answers.filter(
cid=cid, exam=exam).first()
answer = question.cid_user_answers.filter(cid=cid, exam=exam).first()
if request.method == "POST":
if answer:
@@ -336,7 +343,9 @@ def exam_take(request, pk, sk, cid, passcode):
elif "finish" in request.POST:
return redirect("sbas:exam_finish", **kwargs)
elif "goto" in request.POST:
return redirect("sbas:exam_take", sk=int(request.POST.get("goto")), **kwargs)
return redirect(
"sbas:exam_take", sk=int(request.POST.get("goto")), **kwargs
)
else:
form = CidUserAnswerForm(instance=answer)
@@ -351,7 +360,6 @@ def exam_take(request, pk, sk, cid, passcode):
if answer is not None:
saved_answer = answer.answer
return render(
request,
"sbas/exam_take.html",
@@ -373,7 +381,11 @@ def exam_take(request, pk, sk, cid, passcode):
def loadJsonAnswer(answer):
pass
SbasExamViews = ExamViews(Exam, Question, CidUserAnswer, "sbas", "sbas", loadJsonAnswer)
GenericExamViews = ExamViews(
Exam, Question, CidUserAnswer, "sbas", "sbas", loadJsonAnswer
)
class QuestionView(LoginRequiredMixin, SingleTableMixin, FilterView):
model = Question
@@ -382,6 +394,7 @@ class QuestionView(LoginRequiredMixin, SingleTableMixin, FilterView):
filterset_class = QuestionFilter
class UserAnswerView(LoginRequiredMixin, DetailView):
model = CidUserAnswer
@@ -399,8 +412,9 @@ class UserAnswerDelete(SuperuserRequiredMixin, DeleteView):
template_name = "user_answer_delete.html"
success_url = reverse_lazy("sbas:user_answer_table_view")
#@user_passes_test(lambda u: u.is_superuser)
#def user_answer_delete_multiple(request):
# @user_passes_test(lambda u: u.is_superuser)
# def user_answer_delete_multiple(request):
# if request.is_ajax():
# print(request.POST["answer_ids"])
# answer_ids = json.loads(request.POST["answer_ids"])
@@ -412,4 +426,4 @@ class UserAnswerDelete(SuperuserRequiredMixin, DeleteView):
# return JsonResponse({"status": "error"})
GenericViews = GenericViewBase("sbas", Question, CidUserAnswer, Exam)
GenericViews = GenericViewBase("sbas", Question, CidUserAnswer, Exam)