diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py index eb80e6ab170a58caf070aafd946c01c84bae8481..7af1c78862e56d73bf0e03256c328c25158209b0 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py @@ -311,7 +311,9 @@ class SubtaskViewSet(LOFARViewSet): @action(methods=['get'], detail=True, url_name='input_dataproducts') def input_dataproducts(self, request, pk=None): subtask = get_object_or_404(models.Subtask, pk=pk) - serializer = serializers.DataproductSerializer(subtask.input_dataproducts, many=True, context={'request': request}) + # fetch the subtask's input_dataproducts and all related properties in one queryset. Major speedup. + input_dataproducts = subtask.input_dataproducts.select_related('dataformat', 'datatype', 'specifications_template', 'producer', 'feedback_template', 'sap', 'global_identifier', 'archive_info').prefetch_related('consumers') + serializer = serializers.DataproductSerializer(input_dataproducts, many=True, context={'request': request}) return RestResponse(serializer.data) @@ -321,7 +323,9 @@ class SubtaskViewSet(LOFARViewSet): @action(methods=['get'], detail=True, url_name='output_dataproducts') def output_dataproducts(self, request, pk=None): subtask = get_object_or_404(models.Subtask, pk=pk) - serializer = serializers.DataproductSerializer(subtask.output_dataproducts, many=True, context={'request': request}) + # fetch the subtask's output_dataproducts and all related properties in one queryset. Major speedup. + output_dataproducts = subtask.output_dataproducts.select_related('dataformat', 'datatype', 'specifications_template', 'producer', 'feedback_template', 'sap', 'global_identifier', 'archive_info').prefetch_related('consumers') + serializer = serializers.DataproductSerializer(output_dataproducts, many=True, context={'request': request}) return RestResponse(serializer.data)