tidy up some longs related stuff

This commit is contained in:
Ross
2024-07-08 13:14:11 +01:00
parent bcfcd8da82
commit 19a9a27747
11 changed files with 140 additions and 44 deletions
+45 -16
View File
@@ -75,7 +75,15 @@ from django.forms.models import model_to_dict
from longs.forms import LongCreationDefaultForm
from longs.models import LongCreationDefault
from generic.views import AuthorRequiredMixin, ExamCloneMixin, ExamCreateBase, ExamDeleteBase, ExamUpdateBase, ExamViews, SeriesImagesZipViewBase
from generic.views import (
AuthorRequiredMixin,
ExamCloneMixin,
ExamCreateBase,
ExamDeleteBase,
ExamUpdateBase,
ExamViews,
SeriesImagesZipViewBase,
)
from reversion.views import RevisionMixin
import reversion
@@ -271,7 +279,10 @@ def long_clone(request, pk):
new_item.pk = None # autogen a new pk (item_id)
# new_item.name = "Copy of " + new_item.name #need to change uniques
if request.user not in new_item.get_author_objects() and not request.user.is_superuser:
if (
request.user not in new_item.get_author_objects()
and not request.user.is_superuser
):
raise PermissionDenied() # or Http404
form = LongForm(request.POST or None, instance=new_item)
@@ -413,10 +424,14 @@ class LongCreateBase(RevisionMixin, LoginRequiredMixin, CreateView):
def get_context_data(self, **kwargs):
context = super(LongCreateBase, self).get_context_data(**kwargs)
queryset = LongSeries.objects.select_related("modality", "examination", "plane").prefetch_related("long").filter(pk=62)#.values()
queryset = (
LongSeries.objects.select_related("modality", "examination", "plane")
.prefetch_related("long")
.filter(pk=62)
) # .values()
print("TEST")
print(queryset)
#queryset = LongSeries.objects.all()
# queryset = LongSeries.objects.all()
if self.request.POST:
context["series_formset"] = SeriesFormSet(
self.request.POST, self.request.FILES, queryset=queryset
@@ -624,7 +639,6 @@ class LongSeriesView(LoginRequiredMixin, SingleTableMixin, FilterView):
filterset_class = LongSeriesFilter
@user_is_long_marker
@reversion.create_revision()
def mark_answer_override(request, exam_id, question_number, cid):
@@ -704,6 +718,7 @@ def mark_answer(request, exam_id, question_number, answer_id, override=False):
# Extract score from form and save it to the object
answer.score = form.cleaned_data["score"]
answer.candidate_feedback = form.cleaned_data["candidate_feedback"]
answer.save()
if "next" in request.POST:
@@ -724,7 +739,12 @@ def mark_answer(request, exam_id, question_number, answer_id, override=False):
# return redirect("longs:mark", pk=exam_id, sk=n - 1)
else:
form = MarkLongQuestionSingleForm(initial={"score": answer.score})
form = MarkLongQuestionSingleForm(
initial={
"score": answer.score,
"candidate_feedback": answer.candidate_feedback,
}
)
else:
if request.method == "POST":
@@ -794,7 +814,10 @@ def mark_answer(request, exam_id, question_number, answer_id, override=False):
marks = set(answer.mark.values_list("score", flat=True))
if len(marks) > 1 or override:
discrepancy_form = MarkLongQuestionSingleForm(
initial={"score": answer.score}
initial={
"score": answer.score,
"candidate_feedback": answer.candidate_feedback,
}
)
return render(
@@ -838,9 +861,7 @@ def mark(request, exam_id, sk):
user_answers = question.cid_user_answers.filter(exam__id=exam_id)
unmarked_count = user_answers.filter(
score=UserAnswer.ScoreOptions.UNMARKED
).count()
unmarked_count = user_answers.filter(score=UserAnswer.ScoreOptions.UNMARKED).count()
if exam.double_mark:
marker_unmarked_count = question.get_unmarked_user_answer_count(
@@ -872,9 +893,9 @@ def mark(request, exam_id, sk):
)
#@login_required
#@user_is_long_marker
#def exam_scores_all(request, pk):
# @login_required
# @user_is_long_marker
# def exam_scores_all(request, pk):
# exam = get_object_or_404(Exam, pk=pk)
#
# questions = exam.exam_questions.all()
@@ -981,7 +1002,7 @@ def mark(request, exam_id, sk):
# )
#def exam_scores_cid_user(request, pk, cid, passcode):
# def exam_scores_cid_user(request, pk, cid, passcode):
# exam = get_object_or_404(Exam, pk=pk)
#
# # TODO:Need some kind of test for cid
@@ -1125,6 +1146,7 @@ def long_series_order_upload_filename(request, pk):
GenericExamViews = ExamViews(Exam, Long, None, UserAnswer, "longs", "long")
class ExamCreate(ExamCreateBase):
model = Exam
form_class = ExamForm
@@ -1138,17 +1160,24 @@ class ExamUpdate(ExamUpdateBase, AuthorOrCheckerRequiredMixin):
class ExamDelete(AuthorOrCheckerRequiredMixin, ExamDeleteBase):
model = Exam
class ExamClone(ExamCloneMixin, ExamCreate):
"""Clone exam view"""
class ExamAuthorUpdate(RevisionMixin, CheckCanEditMixin, LoginRequiredMixin, AuthorRequiredMixin, UpdateView):
class ExamAuthorUpdate(
RevisionMixin,
CheckCanEditMixin,
LoginRequiredMixin,
AuthorRequiredMixin,
UpdateView,
):
model = Exam
form_class = ExamAuthorForm
template_name = "author_form.html"
#class ExamViewSet(RevisionMixin, viewsets.ModelViewSet):
# class ExamViewSet(RevisionMixin, viewsets.ModelViewSet):
# queryset = Exam.objects.all().order_by("name")
# serializer_class = ExamSerializer