From 38b27271acb3cb05c9ed002e20d25967c1a4dfce Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 2 Dec 2025 17:21:24 +1100 Subject: [PATCH] [bug] Handle TransactionManagementError (#10942) In the case where we try to call refresh_from_db within an atomic transaction block, it will throw a TransactionManagementError --- src/backend/InvenTree/InvenTree/models.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/backend/InvenTree/InvenTree/models.py b/src/backend/InvenTree/InvenTree/models.py index c6f61b3ca3..71bf510871 100644 --- a/src/backend/InvenTree/InvenTree/models.py +++ b/src/backend/InvenTree/InvenTree/models.py @@ -10,6 +10,7 @@ from django.core.exceptions import ValidationError from django.db import models from django.db.models import QuerySet from django.db.models.signals import post_save +from django.db.transaction import TransactionManagementError from django.dispatch import receiver from django.urls import resolve, reverse from django.urls.exceptions import NoReverseMatch @@ -763,7 +764,15 @@ class InvenTreeTree(MPTTModel): if len(trees) > 0: # A tree update was performed, so we need to refresh the instance - self.refresh_from_db() + try: + self.refresh_from_db() + except TransactionManagementError: + # If we are inside a transaction block, we cannot refresh from db + pass + except Exception as e: + # Any other error is unexpected + InvenTree.sentry.report_exception(e) + InvenTree.exceptions.log_error(f'{self.__class__.__name__}.save') def partial_rebuild(self, tree_id: int) -> bool: """Perform a partial rebuild of the tree structure.