From a760d00c96e44f96f9e64673d954f1af9d19c1b8 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Feb 2025 13:50:17 +1100 Subject: [PATCH] Cleanup BomItemSerializer (#9017) - Consolidate functions - Code cleanup --- src/backend/InvenTree/part/api.py | 1 - src/backend/InvenTree/part/serializers.py | 45 ++++++++--------------- 2 files changed, 16 insertions(+), 30 deletions(-) diff --git a/src/backend/InvenTree/part/api.py b/src/backend/InvenTree/part/api.py index f097cf39d841..f5ab295cb773 100644 --- a/src/backend/InvenTree/part/api.py +++ b/src/backend/InvenTree/part/api.py @@ -1863,7 +1863,6 @@ def get_queryset(self, *args, **kwargs): """Return the queryset object for this endpoint.""" queryset = super().get_queryset(*args, **kwargs) - queryset = self.get_serializer_class().setup_eager_loading(queryset) queryset = self.get_serializer_class().annotate_queryset(queryset) return queryset diff --git a/src/backend/InvenTree/part/serializers.py b/src/backend/InvenTree/part/serializers.py index 11f78af4dc34..ecd8a651ee31 100644 --- a/src/backend/InvenTree/part/serializers.py +++ b/src/backend/InvenTree/part/serializers.py @@ -1696,35 +1696,6 @@ def validate_quantity(self, quantity): external_stock = serializers.FloatField(read_only=True) - @staticmethod - def setup_eager_loading(queryset): - """Prefetch against the provided queryset to speed up database access.""" - queryset = queryset.prefetch_related('part') - queryset = queryset.prefetch_related('part__category') - queryset = queryset.prefetch_related('part__stock_items') - - queryset = queryset.prefetch_related('sub_part') - queryset = queryset.prefetch_related('sub_part__category') - queryset = queryset.prefetch_related('sub_part__pricing_data') - - queryset = queryset.prefetch_related( - 'sub_part__stock_items', - 'sub_part__stock_items__allocations', - 'sub_part__stock_items__sales_order_allocations', - ) - - queryset = queryset.select_related( - 'part__pricing_data', 'sub_part__pricing_data' - ) - - queryset = queryset.prefetch_related( - 'substitutes', 'substitutes__part__stock_items' - ) - - queryset = queryset.prefetch_related('sub_part__builds') - - return queryset - @staticmethod def annotate_queryset(queryset): """Annotate the BomItem queryset with extra information. @@ -1737,6 +1708,22 @@ def annotate_queryset(queryset): available_stock = total_stock - build_order_allocations - sales_order_allocations """ + # Prefetch related fields + queryset = queryset.prefetch_related( + 'part', + 'part__category', + 'part__stock_items', + 'sub_part', + 'sub_part__builds', + 'sub_part__category', + 'sub_part__pricing_data', + 'sub_part__stock_items', + 'sub_part__stock_items__allocations', + 'sub_part__stock_items__sales_order_allocations', + 'substitutes', + 'substitutes__part__stock_items', + ).select_related('part__pricing_data', 'sub_part__pricing_data') + # Annotate with the 'total pricing' information based on unit pricing and quantity queryset = queryset.annotate( pricing_min_total=ExpressionWrapper(