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")
|
||||
|
||||
def get_exam_json(self, based=True):
|
||||
questions = self.exam_questions.all()
|
||||
questions = self.get_questions()
|
||||
|
||||
exam_questions = defaultdict(dict)
|
||||
|
||||
|
||||
@@ -426,6 +426,7 @@ class Case(models.Model, AuthorMixin):
|
||||
return json.dumps(self.get_viva_details())
|
||||
|
||||
|
||||
|
||||
def extract_image_dicom_json_from_ds(ds, url, image_index):
|
||||
to_keep = [
|
||||
"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):
|
||||
case = models.ForeignKey(Case, on_delete=models.CASCADE)
|
||||
series = models.ForeignKey(Series, on_delete=models.CASCADE)
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
</div>
|
||||
<h3>Cases</h3>
|
||||
<ol id="full-question-list" class="sortable">
|
||||
{% for case in cases %}
|
||||
<li data-question_pk={{case.pk}}><a href="{% url 'atlas:collection_case_view' pk=collection.pk case_number=forloop.counter0 %}">Case {{forloop.counter}}</a>
|
||||
: {{case.title}}
|
||||
{% for casedetail in casesdetails %}
|
||||
<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>
|
||||
: {{casedetail.case.title}}
|
||||
</li>
|
||||
|
||||
{% endfor %}
|
||||
|
||||
+7
-2
@@ -387,8 +387,12 @@ def add_case_to_collection(request, collection_id):
|
||||
|
||||
if request.method == "POST":
|
||||
case = get_object_or_404(Case, pk=request.POST["case"])
|
||||
|
||||
if case in collection.cases.all():
|
||||
return HttpResponse("Case already in collection")
|
||||
print(case)
|
||||
collection.cases.add(case)
|
||||
collection.order_cases()
|
||||
return HttpResponse("Case added to collection")
|
||||
|
||||
|
||||
@@ -1380,12 +1384,13 @@ def collection_viva_series(request, pk, series_id):
|
||||
def collection_detail(request, 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(
|
||||
request,
|
||||
"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)
|
||||
|
||||
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")
|
||||
|
||||
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):
|
||||
if self.stats_candidates < int(4):
|
||||
return f"- Candidates: {int(self.stats_candidates)} (too few to generate stats)"
|
||||
@@ -889,11 +896,11 @@ class ExamBase(ExamOrCollectionGenericBase):
|
||||
return time_limit.strip()
|
||||
|
||||
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):
|
||||
# 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):
|
||||
c = "c/" + str(cid_user)
|
||||
|
||||
+1
-1
@@ -667,7 +667,7 @@ class Exam(ExamBase):
|
||||
return len(normal)
|
||||
|
||||
def get_exam_json(self, based=True):
|
||||
questions = self.exam_questions.all()
|
||||
questions = self.get_questions()
|
||||
|
||||
exam_questions = defaultdict(dict)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user