Merge branch 'master' of ssh://161.35.163.87:/home/django/rad

This commit is contained in:
Ross
2021-03-08 11:43:38 +00:00
11 changed files with 104 additions and 33 deletions
+4 -11
View File
@@ -205,6 +205,7 @@ class Long(models.Model):
#"feedback_image": [],
#"annotations": [str(q.image_annotations)],
"type": "long",
"cached": False,
}
return exam_question
@@ -393,14 +394,10 @@ class LongSeries(models.Model):
else:
skipcount = skipcount + 1
print("skipped, no SliceLocation: {}".format(skipcount))
print("skipped, no {}: {}".format(field, skipcount))
# ensure they are in the correct order
slices = sorted(slices, key=lambda s: s[field].value)
#if field == "SliceLocation":
# slices = sorted(slices, key=lambda s: s.SliceLocation)
#elif field == "InstanceNumber":
# slices = sorted(slices, key=lambda s: s.InstanceNumber)
#print(slices)
@@ -632,12 +629,6 @@ class CidUserAnswer(models.Model):
ans = ans.strip()
# def get_compare_string(self):
# # strip here should be unneccasry (providing clean is now working)
# s = self.answer.lower().strip()
# s = s.translate(str.maketrans('', '', string.punctuation))
# return s
def is_marked(self):
if self.score == "":
return False
@@ -645,4 +636,6 @@ class CidUserAnswer(models.Model):
return True
def get_answer_score(self):
if self.score == "":
return ""
return float(self.score)
+16 -1
View File
@@ -4,13 +4,28 @@
<div class="longs">
<h2>Exam: {{ exam.name }}</h2>
<h3>Candidate: {{ cid }}</h3>
Answers:
Scores:
<ul>{% for score in answers_marks %}
<li class="user-answer-li">Question {{forloop.counter}}</li>
<span class="user-answer-score user-answer-score-{{score}}"><pre>{{ans}}</pre> ({{score}})</span>
{% endfor %}
</ul>
<br /> Total mark: {{ total_score }} / {{max_score}}
<div>
<h4>Answers</h4>
<ul class="long-answer">{% for a,b,c,d,e in answer_text %}
<li class="user-answer-li"><b>Question {{forloop.counter}}</b></li>
<ul>
<li class="user-answer-li">Observation</br><pre>{{a}}</pre></li>
<li class="user-answer-li">Interpretation</br><pre>{{b}}</pre></li>
<li class="user-answer-li">Principle Diagnosis</br><pre>{{c}}</pre></li>
<li class="user-answer-li">Differential Diagnosis</br><pre>{{d}}</pre></li>
<li class="user-answer-li">Management</br><pre>{{e}}</pre></li>
</ul>
{% endfor %}
</ul>
</div>
<div>
<a href="{% url 'cid_scores' cid %}">Other exams</a>
</div>
@@ -17,6 +17,7 @@ This series is not associated with any cases.
<div>
<a href="{% url 'longs:long_series_order_dicom' pk=series.pk %}" title="orders dicom by slice location">Order dicoms by slice location</a>
<a href="{% url 'longs:long_series_order_dicom_instance' pk=series.pk %}" title="orders dicom by instance number">Order dicoms by instance number</a>
<a href="{% url 'longs:long_series_order_dicom_SeriesInstanceUID' pk=series.pk %}" title="orders dicom by instance number">Order dicoms by SeriesInstanceUID</a>
<a href="{% url 'longs:long_series_order_upload_filename' pk=series.pk %}" title="orders dicom by uploaded filename">Order by uploaded filename</a>
</div>
{% for image in series.images.all %}
+1
View File
@@ -13,6 +13,7 @@ urlpatterns = [
path("series/<int:pk>", views.long_series_detail, name="long_series_detail"),
path("series/<int:pk>/order_dicom", views.long_series_order_dicom, name="long_series_order_dicom"),
path("series/<int:pk>/order_dicom_instance", views.long_series_order_dicom_instance, name="long_series_order_dicom_instance"),
path("series/<int:pk>/order_dicom_SeriesInstanceUID", views.long_series_order_dicom_SeriesInstanceUID, name="long_series_order_dicom_SeriesInstanceUID"),
path("series/<int:pk>/order_upload_filename", views.long_series_order_upload_filename, name="long_series_order_upload_filename"),
path("series/<int:pk>/delete", views.LongSeriesDelete.as_view(), name="long_series_delete"),
# path("unchecked/", views.unchecked_list, name="unchecked_list"),
+20
View File
@@ -889,21 +889,27 @@ def exam_scores_cid_user(request, pk, sk):
#answers_and_marks = []
answers_marks = []
#answers = []
answer_text = []
for q in questions:
# Get user answer
user_answer = q.cid_user_answers.filter(cid=cid).first()
if not user_answer or user_answer is None:
# skip if no answer
#answers_marks.append("")
#answers.append("")
answer_score = 4
#ans = "Not answered"
answer_text.append((("Not answered"),("Not answered"),("Not answered"),("Not answered"),("Not answered")))
else:
answer_score = user_answer.get_answer_score()
answer_text.append((user_answer.answer_observations, user_answer.answer_interpretation, user_answer.answer_principle_diagnosis, user_answer.answer_differential_diagnosis, user_answer.answer_management))
if not exam.publish_results:
answer_score = 0
#answers.append(ans)
@@ -931,6 +937,7 @@ def exam_scores_cid_user(request, pk, sk):
"answers_marks": answers_marks,
"total_score": total_score,
"max_score": max_score,
"answer_text": answer_text
#"answers_and_marks": answers_and_marks,
},
)
@@ -955,6 +962,16 @@ def long_series_order_dicom_instance(request, pk):
return redirect("longs:long_series_detail", pk=pk)
@login_required
def long_series_order_dicom_SeriesInstanceUID(request, pk):
series = get_object_or_404(LongSeries, pk=pk)
try:
series.order_by_dicom("SeriesInstanceUID")
except:
return HttpResponse('<h1>Series does not appear to contain dicoms (or field SeriesInstanceUID)</h1>')
return redirect("longs:long_series_detail", pk=pk)
@login_required
def long_series_order_upload_filename(request, pk):
series = get_object_or_404(LongSeries, pk=pk)
@@ -986,6 +1003,9 @@ def question_json(request, pk):
cache.set("{}_question_json_{}".format("longs", pk), question_json, 3600)
question.recreate_json = False
question.save()
return JsonResponse(question_json)
@login_required