From 19175258fd9fb76410cbc6f442364341827b9167 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 23 Oct 2024 16:29:33 +0200 Subject: [PATCH] API: Fix event cloning, limit_sales_channels should never be set when all_sales_channels is set (Z#23169537) --- src/pretix/api/serializers/__init__.py | 4 ++++ src/pretix/api/serializers/item.py | 2 +- src/pretix/api/views/event.py | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/pretix/api/serializers/__init__.py b/src/pretix/api/serializers/__init__.py index cf1ce268b5..a0c83e3de3 100644 --- a/src/pretix/api/serializers/__init__.py +++ b/src/pretix/api/serializers/__init__.py @@ -110,6 +110,10 @@ class SalesChannelMigrationMixin: data["all_sales_channels"] = False data["limit_sales_channels"] = data["sales_channels"] del data["sales_channels"] + + if data.get("all_sales_channels"): + data["limit_sales_channels"] = [] + return super().to_internal_value(data) def to_representation(self, value): diff --git a/src/pretix/api/serializers/item.py b/src/pretix/api/serializers/item.py index 053481014f..7133776f88 100644 --- a/src/pretix/api/serializers/item.py +++ b/src/pretix/api/serializers/item.py @@ -369,7 +369,7 @@ class ItemSerializer(SalesChannelMigrationMixin, I18nAwareModelSerializer): require_membership_types = validated_data.pop('require_membership_types', []) limit_sales_channels = validated_data.pop('limit_sales_channels', []) item = Item.objects.create(**validated_data) - if limit_sales_channels: + if limit_sales_channels and not validated_data.get('all_sales_channels'): item.limit_sales_channels.add(*limit_sales_channels) if picture: item.picture.save(os.path.basename(picture.name), picture) diff --git a/src/pretix/api/views/event.py b/src/pretix/api/views/event.py index 0a33f58e57..c5ecea18b0 100644 --- a/src/pretix/api/views/event.py +++ b/src/pretix/api/views/event.py @@ -297,7 +297,8 @@ class EventViewSet(viewsets.ModelViewSet): if 'all_sales_channels' in serializer.validated_data and 'sales_channels' in serializer.validated_data: new_event.all_sales_channels = serializer.validated_data['all_sales_channels'] - new_event.limit_sales_channels.set(serializer.validated_data['limit_sales_channels']) + if not new_event.all_sales_channels: + new_event.limit_sales_channels.set(serializer.validated_data['limit_sales_channels']) else: serializer.instance.set_defaults()