fix some anatomy question creation bugs

This commit is contained in:
Ross
2024-10-14 10:08:54 +01:00
parent ffac3175e1
commit 8b84654ee3
7 changed files with 72 additions and 21 deletions
@@ -231,6 +231,8 @@
<p>This form can be used to create an Anatomy question.</p> <p>This form can be used to create an Anatomy question.</p>
<p>Question type can be selected from a predefined list. If you require a more please contact ross.kruger@nhs.net.</p> <p>Question type can be selected from a predefined list. If you require a more please contact ross.kruger@nhs.net.</p>
<p>Correct and incorrect answers can be defined once the question has been created.</p>
</details> </details>
<form action="" method="post" enctype="multipart/form-data" id="anatomyquestion-form"> <form action="" method="post" enctype="multipart/form-data" id="anatomyquestion-form">
{% csrf_token %} {% csrf_token %}
@@ -29,7 +29,10 @@
{% include 'anatomy/question_link_header.html' %} {% include 'anatomy/question_link_header.html' %}
{% endif %} {% endif %}
<h2>Question Answers</h2> <h2>Question Answers</h2>
This page can be used to add and modify answers associated with a question. Answers in here will be used for automarking submitted answers so it is best not to remove. Updating an answer here will not automatically update a submitted answers (scores cache would need to be refreshed) <details class="help-text">
<summary><i class="bi bi-info-circle"></i> Help</summary>
<p>This page can be used to add and modify answers associated with a question. Answers in here will be used for automarking submitted answers so it is best not to remove. Updating an answer here will not automatically update a submitted answers (scores cache would need to be refreshed)</p>
</details>
<form action="" method="post" enctype="multipart/form-data" id="anatomyquestion-form"> <form action="" method="post" enctype="multipart/form-data" id="anatomyquestion-form">
{% csrf_token %} {% csrf_token %}
<h3>Answers:</h3> <h3>Answers:</h3>
@@ -45,7 +48,7 @@ This page can be used to add and modify answers associated with a question. Answ
{{ answer_formset.management_form }} {{ answer_formset.management_form }}
<input type="button" value="Add More Answers" id="add_more"> <input type="button" value="Add More Answers" id="add_more">
<p> <p>
<input type="submit" class="submit-button" value="Submit" name="submit"> <input type="submit" class="submit-button btn btn-primary" value="Submit" name="submit">
</p> </p>
</form> </form>
<div id="empty_form" style="display:none"> <div id="empty_form" style="display:none">
+21 -14
View File
@@ -514,27 +514,34 @@ class AnatomyQuestionCreateBase(RevisionMixin, LoginRequiredMixin, CreateView):
self.object = form.save(commit=False) self.object = form.save(commit=False)
self.object.save() self.object.save()
response = super().form_valid(form)
form.instance.author.add(self.request.user.id) form.instance.author.add(self.request.user.id)
context = self.get_context_data(form=form) #context = self.get_context_data(form=form)
formset = context["answer_formset"] #formset = context["answer_formset"]
if formset.is_valid(): #if formset.is_valid():
response = super().form_valid(form) # response = super().form_valid(form)
formset.instance = self.object # formset.instance = self.object
formset.save() # formset.save()
# If the normal submit button is pressed we save as normal # # If the normal submit button is pressed we save as normal
if "submit" in self.request.POST: # if "submit" in self.request.POST:
return response # return response
# else we redirect to the clone url # # else we redirect to the clone url
else: # else:
return redirect("anatomy:question_clone", pk=self.object.pk) # return redirect("anatomy:question_clone", pk=self.object.pk)
#else:
# return super().form_invalid(form)
# If the normal submit button is pressed we save as normal
if "submit" in self.request.POST:
return response
# else we redirect to the clone url
else: else:
return super().form_invalid(form) return redirect("anatomy:question_clone", pk=self.object.pk)
def get_success_url(self) -> str: def get_success_url(self) -> str:
return redirect("anatomy:question_detail", pk=self.object.pk) return reverse("anatomy:question_detail", kwargs={"pk":self.object.pk})
class AnatomyQuestionCreate(AnatomyQuestionCreateBase): class AnatomyQuestionCreate(AnatomyQuestionCreateBase):
+1 -1
View File
@@ -421,7 +421,7 @@ urlpatterns = [
), ),
path( path(
"structure-autocomplete", "structure-autocomplete",
views.StructureAutocomplete.as_view(model=Structure, create_field="name"), views.StructureAutocomplete.as_view(model=Structure, create_field="name", validate_create=True),
name="structure-autocomplete", name="structure-autocomplete",
), ),
path("presentation/", views.PresentationView.as_view(), name="presentation_view"), path("presentation/", views.PresentationView.as_view(), name="presentation_view"),
+34 -4
View File
@@ -66,7 +66,8 @@ import datetime
from django.forms.utils import from_current_timezone, to_current_timezone from django.forms.utils import from_current_timezone, to_current_timezone
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit from crispy_forms.layout import Submit, Layout, Fieldset, Field, Div
from crispy_forms.bootstrap import Accordion, AccordionGroup
from dal import autocomplete from dal import autocomplete
@@ -119,7 +120,33 @@ class ExamFormMixin:
self.helper.form_method = "post" self.helper.form_method = "post"
self.helper.form_action = "submit" self.helper.form_action = "submit"
self.helper.add_input(Submit("submit", "Submit")) self.helper.layout = Layout(
Fieldset(
"Exam Details",
"name",
"time_limit",
"open_access",
"authors_only",
"exam_mode",
"include_history",
"active",
"publish_results",
"archive",
Accordion(
AccordionGroup("Date restrictions",
"restrict_to_dates",
"start_date",
"end_date",
)
),
),
Div(
Submit("submit", "Submit"),
css_class="form-group",
),
)
# self.helper.add_input(Submit("submit", "Submit"))
# if user.is_superuser or user.groups.filter(name="cid_user_manager").exists(): # if user.is_superuser or user.groups.filter(name="cid_user_manager").exists():
# cid_user_group_queryset = CidUserGroup.objects.filter(archive=False) # cid_user_group_queryset = CidUserGroup.objects.filter(archive=False)
@@ -675,6 +702,7 @@ class UserUserForm(Form):
last_name = CharField(max_length=255, required=True) last_name = CharField(max_length=255, required=True)
grade = ModelChoiceField(UserGrades.objects.all(), required=False) grade = ModelChoiceField(UserGrades.objects.all(), required=False)
class TraineeForm(Form): class TraineeForm(Form):
username = EmailField( username = EmailField(
required=True, required=True,
@@ -684,10 +712,12 @@ class TraineeForm(Form):
last_name = CharField(max_length=255, required=True) last_name = CharField(max_length=255, required=True)
grade = ModelChoiceField(UserGrades.objects.all(), required=False) grade = ModelChoiceField(UserGrades.objects.all(), required=False)
supervisor = ModelChoiceField( supervisor = ModelChoiceField(
Supervisor.objects.all().order_by("name"), required=False, widget=autocomplete.ModelSelect2(url='generic:supervisor-autocomplete') Supervisor.objects.all().order_by("name"),
required=False,
widget=autocomplete.ModelSelect2(url="generic:supervisor-autocomplete"),
) # Needs to be a user/object ref ) # Needs to be a user/object ref
#class Meta: # class Meta:
# widgets = { # widgets = {
# "supervisor" : autocomplete.ModelSelect2(url='generic:supervisor-autocomplete') # "supervisor" : autocomplete.ModelSelect2(url='generic:supervisor-autocomplete')
# } # }
+1
View File
@@ -30,3 +30,4 @@ if __name__ == "__main__":
) )
raise raise
execute_from_command_line(sys.argv) execute_from_command_line(sys.argv)
+8
View File
@@ -1313,3 +1313,11 @@ details.help-text > summary {
#dicom-image .help-text:hover{ #dicom-image .help-text:hover{
background-color: rgba(0, 0, 0, 0.546); background-color: rgba(0, 0, 0, 0.546);
} }
.accordion-item {
background-color: black;
}
.accordion-button {
background-color: darkgray;
}