Skip to content

Commit

Permalink
fix: all subquestions have to be answered before submitting
Browse files Browse the repository at this point in the history
  • Loading branch information
huangziwei committed Oct 17, 2023
1 parent ec06c0d commit 0b8e54b
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 52 deletions.
2 changes: 1 addition & 1 deletion populate-evaluate-bagnet-task2.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
def get_image_title(image_name):
row = all_images_inference[all_images_inference["filename"] == image_name]
if row.pred.values[0] == 0:
return f"AI model predicts:<br><strong>healthy</strong> ({row.confidence.values[0] * 100:.0f}% confidence)."
return f"AI model predicts:<br><strong>no DR</strong> ({row.confidence.values[0] * 100:.0f}% confidence)."
else:
return f"AI model predicts:<br><strong>DR</strong> ({row.confidence.values[0] * 100:.0f}% confidence)."

Expand Down
2 changes: 1 addition & 1 deletion populate-evaluate-bagnet-task3.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
def get_image_title(image_name):
row = all_images_inference[all_images_inference["filename"] == image_name]
if row.pred.values[0] == 0:
return f"AI model predicts:<br><strong>healthy</strong> ({row.confidence.values[0] * 100:.0f}% confidence)."
return f"AI model predicts:<br><strong>no DR</strong> ({row.confidence.values[0] * 100:.0f}% confidence)."
else:
return f"AI model predicts:<br><strong>DR</strong> ({row.confidence.values[0] * 100:.0f}% confidence)."

Expand Down
15 changes: 10 additions & 5 deletions retimgeval/templates/retimgeval/question_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -118,16 +118,21 @@ <h1>{{ question.description }}</h1>
<form action="{{ question.get_absolute_url }}" method="POST">
{% csrf_token %}
{% for sub_question, form in sub_questions_and_forms %}
<div class="sub-question mt-3">
<div class="sub-question mt-3">
<h4>{{ sub_question.description }}</h4>
{% if sub_question in unanswered_sub_questions %}
<div class="alert alert-danger">
This subquestion is not yet answered.
</div>
{% endif %}
<div class="sub-question-form choices">
{% for choice in form.choice.field.choices %}
{% for choice in form.choice.field.choices %}
<input class="me-1" type="radio" id="{{ choice.0 }}" name="{{ sub_question.id }}" value="{{ choice.0 }}">
<label class="me-5" for="{{ choice.0 }}">{{ choice.1 }}</label>
{% endfor %}
{% endfor %}
</div>
</div>
<br>
</div>
<br>
{% endfor %}
<button type="submit" class="btn btn-primary">Submit</button>
</form>
Expand Down
89 changes: 44 additions & 45 deletions retimgeval/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,14 @@ def question_detail(request, slug):
return redirect("retimgeval:thank_you", alias=task.alias)

sub_questions = SubQuestion.objects.filter(question=question)
context = {}

if sub_questions.exists():
# Handle SubQuestion logic
if request.method == "POST":
valid_answers = [] # Collect valid answers here
unanswered_sub_questions = []

for sub_question in sub_questions:
choice_id = request.POST.get(str(sub_question.id), None)
form_data = {"choice": choice_id}
Expand All @@ -95,46 +99,45 @@ def question_detail(request, slug):
answer.question = question
answer.sub_question = sub_question
answer.user = request.user
answer.save()
valid_answers.append(answer)
else:
print(
f"Form is not valid for sub_question {sub_question.id}: {form.errors}"
)
return render(
request,
"retimgeval/question_detail.html",
{"form_errors": form.errors},
)
unanswered_sub_questions.append(sub_question)

next_question = get_next_unanswered_question(request, task)
if next_question:
return redirect("retimgeval:question_detail", slug=next_question.slug)
else:
return redirect("retimgeval:thank_you", alias=task.alias)
if len(valid_answers) == sub_questions.count():
for answer in valid_answers:
answer.save()

else:
sub_questions_and_forms = []
for sub_question in sub_questions:
form = AnswerForm()
form.fields["choice"].queryset = sub_question.choice_set.all()
sub_questions_and_forms.append((sub_question, form))
next_question = get_next_unanswered_question(request, task)
if next_question:
return redirect(
"retimgeval:question_detail", slug=next_question.slug
)
else:
return redirect("retimgeval:thank_you", alias=task.alias)
else:
context["unanswered_sub_questions"] = unanswered_sub_questions

context = {
"question": question,
"sub_questions_and_forms": sub_questions_and_forms,
"reaction_time": request.GET.get("reaction_time", None),
"delay_time": request.GET.get("delay_time", None),
}
sub_questions_and_forms = []
for sub_question in sub_questions:
form = AnswerForm()
form.fields["choice"].queryset = sub_question.choice_set.all()
sub_questions_and_forms.append((sub_question, form))

context.update(
{
"question": question,
"sub_questions_and_forms": sub_questions_and_forms,
"reaction_time": request.GET.get("reaction_time", None),
"delay_time": request.GET.get("delay_time", None),
}
)

else:
# Handle original Question logic
choices = question.choice_set.all()
if request.method == "POST":
form = AnswerForm(request.POST)
form.question = question
form.fields["choice"].queryset = Choice.objects.filter(
question_id=form.question.pk
)
form.fields["choice"].queryset = choices

if form.is_valid():
option = form.save(commit=False)
Expand All @@ -152,23 +155,19 @@ def question_detail(request, slug):
)
else:
return redirect("retimgeval:thank_you", alias=task.alias)

else:
form = AnswerForm()
form.question = question
form.fields["choice"].queryset = Choice.objects.filter(
question_id=form.question.pk
)
print(Choice.objects.filter(question_id=form.question.pk))
print(form)

context = {
"question": question,
"choices": choices,
"form": form,
"reaction_time": request.GET.get("reaction_time", None),
"delay_time": request.GET.get("delay_time", None),
}
form.fields["choice"].queryset = choices

context.update(
{
"question": question,
"choices": choices,
"form": form,
"reaction_time": request.GET.get("reaction_time", None),
"delay_time": request.GET.get("delay_time", None),
}
)

return render(request, "retimgeval/question_detail.html", context)

Expand Down

0 comments on commit 0b8e54b

Please sign in to comment.