From 8764ad5059b340979acb562192febed4174fe4a0 Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Wed, 30 Sep 2026 20:26:13 +0200 Subject: [PATCH] Allow same datafields on product if different sales channel selected --- src/pretix/base/models/event.py | 4 ++++ src/pretix/base/models/items.py | 12 +++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/pretix/base/models/event.py b/src/pretix/base/models/event.py index 818e970f78..491fa6c397 100644 --- a/src/pretix/base/models/event.py +++ b/src/pretix/base/models/event.py @@ -1429,6 +1429,10 @@ class Event(EventMixin, LoggedModel): return issues + @property + def sales_channels(self): + return self.organizer.sales_channels if self.all_sales_channels else self.limit_sales_channels + def get_users_with_any_permission(self): """ Returns a queryset of users who have any permission to this event. diff --git a/src/pretix/base/models/items.py b/src/pretix/base/models/items.py index f6cf2e7f15..3574760be3 100644 --- a/src/pretix/base/models/items.py +++ b/src/pretix/base/models/items.py @@ -2056,16 +2056,18 @@ class Questionnaire(LoggedModel): def check_constraints(event): errors = set() all_questionnaires = Questionnaire.objects.filter(event=event).prefetch_related('children', 'items') - for (type, item_id, sdf, udf), fields in groupby(sorted( - (q.type, item.id, c.system_datafield or '', c.user_datafield_id or 0, q, item) + all_sales_channels = event.sales_channels.all() + for (sales_channel, type, item_id, sdf, udf), fields in groupby(sorted( + (sales_channel, q.type, item.id, c.system_datafield or '', c.user_datafield_id or 0, q, item) for q in all_questionnaires + for sales_channel in (q.limit_sales_channels if not q.all_sales_channels else all_sales_channels).values_list('pk', flat=True) for item in q.items.all() for c in q.children.all() - ), key=lambda d: (d[0], d[1], d[2], d[3])): + ), key=lambda d: (d[0], d[1], d[2], d[3], d[4])): fields = list(fields) if len(fields) > 1: - type, item_id, sdf, udf, q, item = fields[0] - questionnaires = set(q for type,item,sdf,udf,q,item in fields) + sales_channel, type, item_id, sdf, udf, q, item = fields[0] + questionnaires = set(q for sc,type,item,sdf,udf,q,item in fields) df_label = _('System data field') + f' "{sdf}"' if sdf else _('User-defined data field') + f' "{str(udf)}"' if len(questionnaires) == 1: errors.add(_('{datafield} added twice to questionnaire "{questionnaire}"').format(