diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index 79ab143c2..1e42f61cc 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -2304,6 +2304,11 @@ class OrderChangeManager: # Do nothing return + # Clear prefetched objects cache of order. We're going to modify the positions and fees and we have no guarantee + # that every operation tuple points to a position/fee instance that has been fetched from the same object cache, + # so it's dangerous to keep the cache around. + self.order._prefetched_objects_cache = {} + # finally, incorporate difference in payment fees self._payment_fee_diff() diff --git a/src/tests/api/test_order_change.py b/src/tests/api/test_order_change.py index d15f36a40..7b4877f1b 100644 --- a/src/tests/api/test_order_change.py +++ b/src/tests/api/test_order_change.py @@ -1673,6 +1673,8 @@ def test_order_change_patch(token_client, organizer, event, order, quota): assert p.item == item2 f.refresh_from_db() assert f.value == Decimal('10.00') + order.refresh_from_db() + assert order.total == Decimal('109.44') @pytest.mark.django_db