diff --git a/training/forms.py b/training/forms.py
index e1a8ed5b..3859e0ec 100644
--- a/training/forms.py
+++ b/training/forms.py
@@ -71,8 +71,9 @@ class RequirementForm(forms.ModelForm):
class SessionLogForm(forms.Form):
trainees = forms.ModelMultipleChoiceField(models.Trainee.objects.all())
- items = forms.ModelMultipleChoiceField(models.TrainingItem.objects.all())
- depth = forms.ChoiceField(choices=models.TrainingItemQualification.CHOICES)
+ items_0 = forms.ModelMultipleChoiceField(models.TrainingItem.objects.all(), required=False)
+ items_1 = forms.ModelMultipleChoiceField(models.TrainingItem.objects.all(), required=False)
+ items_2 = forms.ModelMultipleChoiceField(models.TrainingItem.objects.all(), required=False)
supervisor = forms.ModelChoiceField(models.Trainee.objects.all())
date = forms.DateField(initial=datetime.date.today)
notes = forms.CharField(required=False, widget=forms.Textarea)
@@ -88,6 +89,7 @@ class SessionLogForm(forms.Form):
supervisor = self.cleaned_data['supervisor']
if supervisor in self.cleaned_data.get('trainees', []):
raise forms.ValidationError('One may not supervise oneself...')
- for item in self.cleaned_data.get('items', []):
- validate_user_can_train_in(supervisor, item)
+ for depth in models.TrainingItemQualification.CHOICES:
+ for item in self.cleaned_data.get('items_{depth.0}', []):
+ validate_user_can_train_in(supervisor, item)
return supervisor
diff --git a/training/templates/session_log_form.html b/training/templates/session_log_form.html
index 0cc7b429..b596f342 100644
--- a/training/templates/session_log_form.html
+++ b/training/templates/session_log_form.html
@@ -2,6 +2,7 @@
{% load static %}
{% load button from filters %}
+{% load colour_from_depth from tags %}
{% block css %}
{{ block.super }}
@@ -36,18 +37,16 @@
Training Items
-
-
-
-
-
-
- {% include 'partials/form_field.html' with field=form.depth %}
-
-
- {% include 'partials/form_field.html' with field=form.date %}
-
+ {% for depth in depths %}
+
+
+
+
+ {% endfor %}
+
Session Information
+
+ {% include 'partials/form_field.html' with field=form.date %}
{% include 'partials/form_field.html' with field=form.notes %}
diff --git a/training/views.py b/training/views.py
index 4b3ee26d..1e8f699e 100644
--- a/training/views.py
+++ b/training/views.py
@@ -219,18 +219,20 @@ class SessionLog(generic.FormView):
success_url = reverse_lazy('trainee_list')
def form_valid(self, form, *args, **kwargs):
- for trainee in form.cleaned_data.get('trainees'):
- for item in form.cleaned_data.get('items'):
- try:
- with transaction.atomic():
- models.TrainingItemQualification.objects.create(trainee=trainee, item=item, supervisor=form.cleaned_data.get('supervisor'), depth=form.cleaned_data.get('depth'), notes=form.cleaned_data.get('notes'), date=form.cleaned_data.get('date'))
- reversion.add_to_revision(trainee)
- except IntegrityError:
- pass # There was an attempt to create a duplicate qualification, ignore it
+ for trainee in form.cleaned_data.get('trainees', []):
+ for depth in models.TrainingItemQualification.CHOICES:
+ for item in form.cleaned_data.get(f'items_{depth[0]}', []):
+ try:
+ with transaction.atomic():
+ models.TrainingItemQualification.objects.create(trainee=trainee, item=item, supervisor=form.cleaned_data.get('supervisor'), depth=depth[0], notes=form.cleaned_data.get('notes'), date=form.cleaned_data.get('date'))
+ reversion.add_to_revision(trainee)
+ except IntegrityError:
+ pass # There was an attempt to create a duplicate qualification, ignore it
return super().form_valid(form, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
+ context["depths"] = models.TrainingItemQualification.CHOICES
context["page_title"] = "Log Training Session"
get_related(context['form'], context)
return context