From 119a2621b5fbb362d55420440f85c7c47daf4be5 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 8 May 2023 18:07:07 +0200 Subject: [PATCH] Sendmail: Optimize query --- src/pretix/plugins/sendmail/views.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pretix/plugins/sendmail/views.py b/src/pretix/plugins/sendmail/views.py index 1ab67cb55..7d42e8dba 100644 --- a/src/pretix/plugins/sendmail/views.py +++ b/src/pretix/plugins/sendmail/views.py @@ -361,7 +361,7 @@ class OrderSendView(BaseSenderView): item_id__in=[i.pk for i in form.cleaned_data.get('items')] ) )), - order=OuterRef('pk'), + order__event=self.request.event, canceled=False, ) @@ -407,7 +407,9 @@ class OrderSendView(BaseSenderView): if form.cleaned_data.get('created_to'): opq = opq.filter(order__datetime__lt=form.cleaned_data.get('created_to')) - return orders.annotate(match_pos=Exists(opq)).filter(match_pos=True).distinct() + # pk__in turns out to be faster than Exists(subquery) in many cases since we often filter on a large subset + # of orderpositions + return orders.filter(pk__in=opq.values_list('order_id')) def describe_match_size(self, cnt): return ngettext(