diff --git a/program/views.py b/program/views.py
index 7b512271ce2e10a758b1e2699f5c8eb41d738380..541bd91b3edf3f21877728535617c62545a07e8a 100644
--- a/program/views.py
+++ b/program/views.py
@@ -1103,18 +1103,22 @@ class APIScheduleViewSet(viewsets.ModelViewSet):
 
         return Response(resolution, status=status.HTTP_201_CREATED)
 
+    def validate_update_request(self):
+        """Validate that the request has the change_schedule permission and includes `schedule`."""
+
+        if not self.request.user.has_perm("program.change_schedule"):
+            return Response(status=status.HTTP_401_UNAUTHORIZED)
+
+        if "schedule" not in self.request.data:
+            return Response(status=status.HTTP_400_BAD_REQUEST)
+
     def update(self, request, *args, **kwargs):
         """
         Update a schedule, generate timeslots, test for collisions and resolve
         them including notes.
         """
 
-        if not self.request.user.has_perm("program.change_schedule"):
-            return Response(status=status.HTTP_401_UNAUTHORIZED)
-
-        # Only allow updating when with the `schedule` JSON object
-        if "schedule" not in request.data:
-            return Response(status=status.HTTP_400_BAD_REQUEST)
+        self.validate_update_request()
 
         schedule = self.get_object()