From 49830731722b08d470d3b159d1bda6b28734fe17 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 25 Oct 2022 12:08:58 +0200 Subject: [PATCH] API: Fix crash with deletion of cart positions with add-ons --- src/pretix/api/views/cart.py | 5 +++++ src/tests/api/test_cart.py | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/pretix/api/views/cart.py b/src/pretix/api/views/cart.py index 60c271adcc..0d1849a614 100644 --- a/src/pretix/api/views/cart.py +++ b/src/pretix/api/views/cart.py @@ -92,6 +92,11 @@ class CartPositionViewSet(CreateModelMixin, DestroyModelMixin, viewsets.ReadOnly def perform_create(self, serializer): raise NotImplementedError() + @transaction.atomic() + def perform_destroy(self, instance): + instance.addons.all().delete() + instance.delete() + def _require_locking(self, quota_diff, voucher_use_diff, seat_diff): if voucher_use_diff or seat_diff: # If any vouchers or seats are used, we lock to make sure we don't redeem them to often diff --git a/src/tests/api/test_cart.py b/src/tests/api/test_cart.py index 03cd709561..b65bfb2b7a 100644 --- a/src/tests/api/test_cart.py +++ b/src/tests/api/test_cart.py @@ -167,6 +167,12 @@ def test_cp_delete(token_client, organizer, event, item, taxrule, question): datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC), expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC) ) + CartPosition.objects.create( + event=event, cart_id="aaa@api", item=item, addon_to=cr, + price=23, attendee_name_parts={'full_name': 'Peter'}, + datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC), + expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC) + ) res = dict(TEST_CARTPOSITION_RES) res["id"] = cr.pk res["item"] = item.pk