mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 13:15:43 +00:00 
			
		
		
		
	Query improvements for BuildLine table (#5153)
- Prefetch / preselect related records - Improve query speed
This commit is contained in:
		| @@ -308,10 +308,6 @@ class BuildLineEndpoint: | ||||
|         """Override queryset to select-related and annotate""" | ||||
|         queryset = super().get_queryset() | ||||
|  | ||||
|         queryset = queryset.select_related( | ||||
|             'build', 'bom_item', | ||||
|         ) | ||||
|  | ||||
|         queryset = build.serializers.BuildLineSerializer.annotate_queryset(queryset) | ||||
|  | ||||
|         return queryset | ||||
|   | ||||
| @@ -1012,7 +1012,7 @@ class BuildItemSerializer(InvenTreeModelSerializer): | ||||
|     build = serializers.PrimaryKeyRelatedField(source='build_line.build', many=False, read_only=True) | ||||
|  | ||||
|     # Extra (optional) detail fields | ||||
|     part_detail = PartBriefSerializer(source='stock_item.part', many=False, read_only=True) | ||||
|     part_detail = PartBriefSerializer(source='stock_item.part', many=False, read_only=True, pricing=False) | ||||
|     stock_item_detail = StockItemSerializerBrief(source='stock_item', read_only=True) | ||||
|     location_detail = LocationSerializer(source='stock_item.location', read_only=True) | ||||
|     build_detail = BuildSerializer(source='build_line.build', many=False, read_only=True) | ||||
| @@ -1074,8 +1074,8 @@ class BuildLineSerializer(InvenTreeModelSerializer): | ||||
|     quantity = serializers.FloatField() | ||||
|  | ||||
|     # Foreign key fields | ||||
|     bom_item_detail = BomItemSerializer(source='bom_item', many=False, read_only=True) | ||||
|     part_detail = PartSerializer(source='bom_item.sub_part', many=False, read_only=True) | ||||
|     bom_item_detail = BomItemSerializer(source='bom_item', many=False, read_only=True, pricing=False) | ||||
|     part_detail = PartSerializer(source='bom_item.sub_part', many=False, read_only=True, pricing=False) | ||||
|     allocations = BuildItemSerializer(many=True, read_only=True) | ||||
|  | ||||
|     # Annotated (calculated) fields | ||||
| @@ -1094,16 +1094,28 @@ class BuildLineSerializer(InvenTreeModelSerializer): | ||||
|         - on_order: Total stock on order for this build line | ||||
|         """ | ||||
|  | ||||
|         queryset = queryset.select_related( | ||||
|             'build', 'bom_item', | ||||
|         ) | ||||
|  | ||||
|         # Pre-fetch related fields | ||||
|         queryset = queryset.prefetch_related( | ||||
|             'bom_item__sub_part', | ||||
|             'bom_item__sub_part__stock_items', | ||||
|             'bom_item__sub_part__stock_items__allocations', | ||||
|             'bom_item__sub_part__stock_items__sales_order_allocations', | ||||
|             'bom_item__sub_part__tags', | ||||
|  | ||||
|             'bom_item__substitutes', | ||||
|             'bom_item__substitutes__part__stock_items', | ||||
|             'bom_item__substitutes__part__stock_items__allocations', | ||||
|             'bom_item__substitutes__part__stock_items__sales_order_allocations', | ||||
|  | ||||
|             'allocations', | ||||
|             'allocations__stock_item', | ||||
|             'allocations__stock_item__part', | ||||
|             'allocations__stock_item__location', | ||||
|             'allocations__stock_item__location__tags', | ||||
|         ) | ||||
|  | ||||
|         # Annotate the "allocated" quantity | ||||
|   | ||||
		Reference in New Issue
	
	Block a user