begin correct sorting of exams/collection
This commit is contained in:
+1
-1
@@ -411,7 +411,7 @@ class Exam(ExamBase):
|
|||||||
examcollection = models.ForeignKey(ExamCollection, blank=True, null=True, on_delete=models.SET_NULL, related_name="anatomy_exams")
|
examcollection = models.ForeignKey(ExamCollection, blank=True, null=True, on_delete=models.SET_NULL, related_name="anatomy_exams")
|
||||||
|
|
||||||
def get_exam_json(self, based=True):
|
def get_exam_json(self, based=True):
|
||||||
questions = self.exam_questions.all()
|
questions = self.get_questions()
|
||||||
|
|
||||||
exam_questions = defaultdict(dict)
|
exam_questions = defaultdict(dict)
|
||||||
|
|
||||||
|
|||||||
@@ -426,6 +426,7 @@ class Case(models.Model, AuthorMixin):
|
|||||||
return json.dumps(self.get_viva_details())
|
return json.dumps(self.get_viva_details())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def extract_image_dicom_json_from_ds(ds, url, image_index):
|
def extract_image_dicom_json_from_ds(ds, url, image_index):
|
||||||
to_keep = [
|
to_keep = [
|
||||||
"Columns",
|
"Columns",
|
||||||
@@ -866,6 +867,13 @@ class CaseCollection(ExamOrCollectionGenericBase):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def order_cases(self):
|
||||||
|
"""Modifies the casedetail sort_order to sequentially order the cases"""
|
||||||
|
for n, c in enumerate(self.casedetail_set.all().order_by("sort_order")):
|
||||||
|
c.sort_order = n
|
||||||
|
c.save()
|
||||||
|
|
||||||
|
|
||||||
class SeriesDetail(models.Model):
|
class SeriesDetail(models.Model):
|
||||||
case = models.ForeignKey(Case, on_delete=models.CASCADE)
|
case = models.ForeignKey(Case, on_delete=models.CASCADE)
|
||||||
series = models.ForeignKey(Series, on_delete=models.CASCADE)
|
series = models.ForeignKey(Series, on_delete=models.CASCADE)
|
||||||
|
|||||||
@@ -10,9 +10,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<h3>Cases</h3>
|
<h3>Cases</h3>
|
||||||
<ol id="full-question-list" class="sortable">
|
<ol id="full-question-list" class="sortable">
|
||||||
{% for case in cases %}
|
{% for casedetail in casesdetails %}
|
||||||
<li data-question_pk={{case.pk}}><a href="{% url 'atlas:collection_case_view' pk=collection.pk case_number=forloop.counter0 %}">Case {{forloop.counter}}</a>
|
<li data-question_pk={{case.pk}}><a title="sort_order: {{casedetail.sort_order}}" href="{% url 'atlas:collection_case_view' pk=collection.pk case_number=forloop.counter0 %}">Case {{forloop.counter}}</a>
|
||||||
: {{case.title}}
|
: {{casedetail.case.title}}
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
+7
-2
@@ -387,8 +387,12 @@ def add_case_to_collection(request, collection_id):
|
|||||||
|
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
case = get_object_or_404(Case, pk=request.POST["case"])
|
case = get_object_or_404(Case, pk=request.POST["case"])
|
||||||
|
|
||||||
|
if case in collection.cases.all():
|
||||||
|
return HttpResponse("Case already in collection")
|
||||||
print(case)
|
print(case)
|
||||||
collection.cases.add(case)
|
collection.cases.add(case)
|
||||||
|
collection.order_cases()
|
||||||
return HttpResponse("Case added to collection")
|
return HttpResponse("Case added to collection")
|
||||||
|
|
||||||
|
|
||||||
@@ -1380,12 +1384,13 @@ def collection_viva_series(request, pk, series_id):
|
|||||||
def collection_detail(request, pk):
|
def collection_detail(request, pk):
|
||||||
collection = get_object_or_404(CaseCollection, pk=pk)
|
collection = get_object_or_404(CaseCollection, pk=pk)
|
||||||
|
|
||||||
cases = collection.cases.all().order_by("casedetail__sort_order")
|
#cases = collection.cases.all().order_by("casedetail__sort_order")
|
||||||
|
casedetails = CaseDetail.objects.filter(collection=collection).order_by("sort_order")
|
||||||
|
|
||||||
return render(
|
return render(
|
||||||
request,
|
request,
|
||||||
"atlas/collection_detail.html",
|
"atlas/collection_detail.html",
|
||||||
{"collection": collection, "cases": cases, "can_edit": True},
|
{"collection": collection, "casesdetails": casedetails, "can_edit": True},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+9
-2
@@ -828,8 +828,15 @@ class ExamBase(ExamOrCollectionGenericBase):
|
|||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
def get_questions(self):
|
def get_questions(self):
|
||||||
|
"""Returns a list of questions in the exam in the correct order"""
|
||||||
return self.exam_questions.all().order_by("examquestiondetail__sort_order")
|
return self.exam_questions.all().order_by("examquestiondetail__sort_order")
|
||||||
|
|
||||||
|
def order_questions(self):
|
||||||
|
"""Modifies the examquestiondetail sort_order to sequentially order the cases"""
|
||||||
|
for n, c in enumerate(self.examquestiondetail_set.all().order_by("sort_order")):
|
||||||
|
c.sort_order = n
|
||||||
|
c.save()
|
||||||
|
|
||||||
def get_exam_stats(self, name=True):
|
def get_exam_stats(self, name=True):
|
||||||
if self.stats_candidates < int(4):
|
if self.stats_candidates < int(4):
|
||||||
return f"- Candidates: {int(self.stats_candidates)} (too few to generate stats)"
|
return f"- Candidates: {int(self.stats_candidates)} (too few to generate stats)"
|
||||||
@@ -889,11 +896,11 @@ class ExamBase(ExamOrCollectionGenericBase):
|
|||||||
return time_limit.strip()
|
return time_limit.strip()
|
||||||
|
|
||||||
def get_question_index(self, question):
|
def get_question_index(self, question):
|
||||||
return list(self.exam_questions.all()).index(question)
|
return list(self.get_questions()).index(question)
|
||||||
|
|
||||||
def get_question_by_index(self, index: int):
|
def get_question_by_index(self, index: int):
|
||||||
# There must be a better way to do this
|
# There must be a better way to do this
|
||||||
return list(self.exam_questions.all())[index]
|
return list(self.get_questions)[index]
|
||||||
|
|
||||||
def get_cid_user_score(self, cid_user):
|
def get_cid_user_score(self, cid_user):
|
||||||
c = "c/" + str(cid_user)
|
c = "c/" + str(cid_user)
|
||||||
|
|||||||
+1
-1
@@ -667,7 +667,7 @@ class Exam(ExamBase):
|
|||||||
return len(normal)
|
return len(normal)
|
||||||
|
|
||||||
def get_exam_json(self, based=True):
|
def get_exam_json(self, based=True):
|
||||||
questions = self.exam_questions.all()
|
questions = self.get_questions()
|
||||||
|
|
||||||
exam_questions = defaultdict(dict)
|
exam_questions = defaultdict(dict)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user