forked from CGM_Public/pretix_original
Query optimization experiments
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.db.models import Exists, F, OuterRef, Q
|
from django.db.models import F, Q
|
||||||
from django.db.models.functions import Coalesce, Concat
|
from django.db.models.functions import Coalesce, Concat
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
||||||
@@ -115,17 +115,14 @@ class OrderFilterForm(FilterForm):
|
|||||||
else:
|
else:
|
||||||
code = Q(code__icontains=Order.normalize_code(u))
|
code = Q(code__icontains=Order.normalize_code(u))
|
||||||
|
|
||||||
matching_invoice = Invoice.objects.filter(
|
matching_invoices = Invoice.objects.annotate(
|
||||||
order=OuterRef('pk'),
|
|
||||||
).annotate(
|
|
||||||
inr=Concat('prefix', 'invoice_no')
|
inr=Concat('prefix', 'invoice_no')
|
||||||
).filter(
|
).filter(
|
||||||
Q(invoice_no__iexact=u)
|
Q(invoice_no__iexact=u)
|
||||||
| Q(invoice_no__iexact=u.zfill(5))
|
| Q(invoice_no__iexact=u.zfill(5))
|
||||||
| Q(inr=u)
|
| Q(inr=u)
|
||||||
)
|
).values_list('order_id', flat=True)
|
||||||
|
|
||||||
qs = qs.annotate(has_inv=Exists(matching_invoice))
|
|
||||||
qs = qs.filter(
|
qs = qs.filter(
|
||||||
code
|
code
|
||||||
| Q(email__icontains=u)
|
| Q(email__icontains=u)
|
||||||
@@ -133,7 +130,7 @@ class OrderFilterForm(FilterForm):
|
|||||||
| Q(positions__attendee_email__icontains=u)
|
| Q(positions__attendee_email__icontains=u)
|
||||||
| Q(invoice_address__name__icontains=u)
|
| Q(invoice_address__name__icontains=u)
|
||||||
| Q(invoice_address__company__icontains=u)
|
| Q(invoice_address__company__icontains=u)
|
||||||
| Q(has_inv=True)
|
| Q(pk__in=matching_invoices)
|
||||||
)
|
)
|
||||||
|
|
||||||
if fdata.get('status'):
|
if fdata.get('status'):
|
||||||
|
|||||||
@@ -34,4 +34,8 @@ class OrderSearch(PaginationMixin, ListView):
|
|||||||
if self.filter_form.is_valid():
|
if self.filter_form.is_valid():
|
||||||
qs = self.filter_form.filter_qs(qs)
|
qs = self.filter_form.filter_qs(qs)
|
||||||
|
|
||||||
return qs.distinct().prefetch_related('event', 'event__organizer')
|
return qs.distinct().only(
|
||||||
|
'id', 'invoice_address__name', 'code', 'event', 'email', 'datetime', 'total', 'status'
|
||||||
|
).prefetch_related(
|
||||||
|
'event', 'event__organizer'
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user