From 1439594806dcebb35c20fff7d98ac82dbf46239c Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 21 May 2021 17:29:41 +0200 Subject: [PATCH] ItemUpdate: Save a few DB queries --- src/pretix/control/forms/item.py | 8 +++++++- src/pretix/plugins/ticketoutputpdf/forms.py | 3 ++- src/pretix/plugins/ticketoutputpdf/signals.py | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pretix/control/forms/item.py b/src/pretix/control/forms/item.py index 7f774c868..dc20384ef 100644 --- a/src/pretix/control/forms/item.py +++ b/src/pretix/control/forms/item.py @@ -654,6 +654,7 @@ class ItemVariationsFormSet(I18nFormSet): def _construct_form(self, i, **kwargs): kwargs['event'] = self.event + kwargs['membership_types'] = self.mt return super()._construct_form(i, **kwargs) @property @@ -664,19 +665,24 @@ class ItemVariationsFormSet(I18nFormSet): prefix=self.add_prefix('__prefix__'), empty_permitted=True, use_required_attribute=False, + membership_types=self.mt, locales=self.locales, event=self.event ) self.add_fields(form, None) return form + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.mt = self.event.organizer.membership_types.all() + class ItemVariationForm(I18nModelForm): def __init__(self, *args, **kwargs): + qs = kwargs.pop('membership_types') super().__init__(*args, **kwargs) change_decimal_field(self.fields['default_price'], self.event.currency) - qs = self.event.organizer.membership_types.all() if qs: self.fields['require_membership_types'].queryset = qs else: diff --git a/src/pretix/plugins/ticketoutputpdf/forms.py b/src/pretix/plugins/ticketoutputpdf/forms.py index 563adcf4d..826b96adc 100644 --- a/src/pretix/plugins/ticketoutputpdf/forms.py +++ b/src/pretix/plugins/ticketoutputpdf/forms.py @@ -41,6 +41,7 @@ class TicketLayoutItemForm(forms.ModelForm): def __init__(self, *args, **kwargs): self.event = kwargs.pop('event') self.sales_channel = kwargs.pop('sales_channel') + queryset = kwargs.pop('queryset') super().__init__(*args, **kwargs) if self.sales_channel.identifier != 'web': self.fields['layout'].label = _('PDF ticket layout for {channel}').format( @@ -50,7 +51,7 @@ class TicketLayoutItemForm(forms.ModelForm): else: self.fields['layout'].label = _('PDF ticket layout') self.fields['layout'].empty_label = _('(Event default)') - self.fields['layout'].queryset = self.event.ticket_layouts.all() + self.fields['layout'].queryset = queryset self.fields['layout'].required = False def save(self, commit=True): diff --git a/src/pretix/plugins/ticketoutputpdf/signals.py b/src/pretix/plugins/ticketoutputpdf/signals.py index 8adfa704e..1361d7531 100644 --- a/src/pretix/plugins/ticketoutputpdf/signals.py +++ b/src/pretix/plugins/ticketoutputpdf/signals.py @@ -64,6 +64,7 @@ def register_multievent_data(sender, **kwargs): @receiver(item_forms, dispatch_uid="pretix_ticketoutputpdf_item_forms") def control_item_forms(sender, request, item, **kwargs): forms = [] + queryset = sender.ticket_layouts.all() for k, v in sorted(list(get_all_sales_channels().items()), key=lambda a: (int(a[0] != 'web'), a[0])): try: inst = TicketLayoutItem.objects.get(item=item, sales_channel=k) @@ -73,6 +74,7 @@ def control_item_forms(sender, request, item, **kwargs): instance=inst, event=sender, sales_channel=v, + queryset=queryset, data=(request.POST if request.method == "POST" else None), prefix="ticketlayoutitem_{}".format(k) ))