Improved BOM import process (#5698)

- Prevent issues due to query within @atomic block
- Speed up import using bulk_create
This commit is contained in:
Oliver 2023-10-16 10:53:31 +11:00 committed by GitHub
parent 814322e512
commit 598f0a5021
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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))