From 598f0a50215be7b57cfa34432d0d693651434152 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 16 Oct 2023 10:53:31 +1100 Subject: [PATCH] Improved BOM import process (#5698) - Prevent issues due to query within @atomic block - Speed up import using bulk_create --- InvenTree/part/serializers.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index 5beb6562a2..7b38827ad6 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -1573,20 +1573,26 @@ class BomImportSubmitSerializer(serializers.Serializer): items = data['items'] + bom_items = [] + try: - with transaction.atomic(): - for item in items: + for item in items: - part = item['part'] - sub_part = item['sub_part'] + part = item['part'] + sub_part = item['sub_part'] - # Ignore duplicate BOM items - if BomItem.objects.filter(part=part, sub_part=sub_part).exists(): - continue + # Ignore duplicate BOM items + if BomItem.objects.filter(part=part, sub_part=sub_part).exists(): + continue - # Create a new BomItem object - BomItem.objects.create(**item) + bom_items.append( + BomItem(**item) + ) + + if len(bom_items) > 0: + logger.info("Importing %s BOM items", len(bom_items)) + BomItem.objects.bulk_create(bom_items) except Exception as e: raise serializers.ValidationError(detail=serializers.as_serializer_error(e))