|
1 | 1 | from django.contrib import messages |
2 | 2 | from django.contrib.auth.mixins import LoginRequiredMixin |
| 3 | +from django.db import transaction |
3 | 4 | from django.http import HttpResponseBadRequest, HttpResponseForbidden, JsonResponse |
4 | 5 | from django.shortcuts import get_object_or_404, redirect, render |
5 | 6 | from django.views import View |
@@ -35,17 +36,43 @@ def post(self, request, class_id=None): |
35 | 36 | class_key = Class.objects.get(id=class_key_id) |
36 | 37 | except Class.DoesNotExist: |
37 | 38 | return HttpResponseBadRequest("Invalid class ID.") |
| 39 | + |
| 40 | + #helper function to ensure input is valid |
| 41 | + def same_length_arr(*arrays): |
| 42 | + lengths = [len(arr) for arr in arrays] |
| 43 | + return all(length == lengths[0] for length in lengths) |
| 44 | + |
| 45 | + # convert all into lists if user provided multiple inputs |
| 46 | + usc_id = usc_id.split(",") |
| 47 | + first_name = first_name.split(",") |
| 48 | + last_name = last_name.split(",") |
| 49 | + email = email.split(",") |
38 | 50 |
|
39 | | - Student.objects.create( |
40 | | - usc_id=usc_id, |
41 | | - first_name=first_name, |
42 | | - last_name=last_name, |
43 | | - class_key=class_key, |
44 | | - seating=seating, |
45 | | - email=email, |
46 | | - ) |
| 51 | + if not same_length_arr(usc_id, first_name, last_name, email): |
| 52 | + messages.error(request, "All fields must have the same number of entries.") |
| 53 | + return render(request, self.template_name, {'classes': Class.objects.filter(professor_key=request.user)}) |
| 54 | + |
| 55 | + # add all students at once, abort on failure |
| 56 | + with transaction.atomic(): |
| 57 | + for i in range(len(usc_id)): |
| 58 | + if len(usc_id[i]) > 9: |
| 59 | + messages.error(request, "USC ID must be 9 characters long.") |
| 60 | + return render(request, self.template_name, {'classes': Class.objects.filter(professor_key=request.user)}) |
| 61 | + |
| 62 | + student = Student( |
| 63 | + usc_id=usc_id[i], |
| 64 | + first_name=first_name[i], |
| 65 | + last_name=last_name[i], |
| 66 | + class_key=class_key, |
| 67 | + seating=seating, |
| 68 | + email=email[i] |
| 69 | + ) |
| 70 | + student.save() |
47 | 71 |
|
48 | | - messages.success(request, f"Student {first_name} {last_name} added successfully!") |
| 72 | + if len(usc_id) == 1: |
| 73 | + messages.success(request, f"Student {first_name[0]} {last_name[0]} added successfully!") |
| 74 | + else: |
| 75 | + messages.success(request, f"{len(usc_id)} students added successfully!") |
49 | 76 |
|
50 | 77 | # Clear the form fields and allow the user to add another student |
51 | 78 | return render(request, self.template_name, {'classes': Class.objects.filter(professor_key=request.user)}) |
|
0 commit comments