Minor SQL performance improvements

This commit is contained in:
Raphael Michel
2020-04-17 12:14:37 +02:00
parent ed5726fc0c
commit e70f593a94
2 changed files with 10 additions and 8 deletions

View File

@@ -455,7 +455,8 @@ class Item(LoggedModel):
t = TaxedPrice(gross=price, net=price, tax=Decimal('0.00'), t = TaxedPrice(gross=price, net=price, tax=Decimal('0.00'),
rate=Decimal('0.00'), name='') rate=Decimal('0.00'), name='')
else: else:
t = self.tax_rule.tax(price, base_price_is=base_price_is, currency=currency) t = self.tax_rule.tax(price, base_price_is=base_price_is,
currency=currency or self.event.currency)
if include_bundled: if include_bundled:
for b in self.bundles.all(): for b in self.bundles.all():

View File

@@ -74,10 +74,11 @@ class CartMixin:
cartpos = self.positions cartpos = self.positions
lcp = list(cartpos) lcp = list(cartpos)
has_addons = {cp.addon_to.pk for cp in lcp if cp.addon_to} has_addons = {cp.addon_to_id for cp in lcp if cp.addon_to_id}
pos_additional_fields = defaultdict(list) pos_additional_fields = defaultdict(list)
for cp in lcp: for cp in lcp:
cp.item.event = self.request.event # will save some SQL queries
responses = question_form_fields.send(sender=self.request.event, position=cp) responses = question_form_fields.send(sender=self.request.event, position=cp)
data = cp.meta_info_data data = cp.meta_info_data
for r, response in sorted(responses, key=lambda r: str(r[0])): for r, response in sorted(responses, key=lambda r: str(r[0])):
@@ -93,13 +94,13 @@ class CartMixin:
# Django is unable to join related models in a .values() query # Django is unable to join related models in a .values() query
def keyfunc(pos): def keyfunc(pos):
if isinstance(pos, OrderPosition): if isinstance(pos, OrderPosition):
if pos.addon_to: if pos.addon_to_id:
i = pos.addon_to.positionid i = pos.addon_to.positionid
else: else:
i = pos.positionid i = pos.positionid
else: else:
if pos.addon_to: if pos.addon_to_id:
i = pos.addon_to.pk i = pos.addon_to_id
else: else:
i = pos.pk i = pos.pk
@@ -108,8 +109,8 @@ class CartMixin:
or self.request.event.settings.attendee_emails_asked or self.request.event.settings.attendee_emails_asked
or pos_additional_fields.get(pos.pk) or pos_additional_fields.get(pos.pk)
) )
addon_penalty = 1 if pos.addon_to else 0 addon_penalty = 1 if pos.addon_to_id else 0
if downloads or pos.pk in has_addons or pos.addon_to: if downloads or pos.pk in has_addons or pos.addon_to_id:
return i, addon_penalty, pos.pk, 0, 0, 0, 0, (pos.subevent_id or 0), (pos.seat_id or 0) return i, addon_penalty, pos.pk, 0, 0, 0, 0, (pos.subevent_id or 0), (pos.seat_id or 0)
if answers and (has_attendee_data or pos.item.questions.all()): if answers and (has_attendee_data or pos.item.questions.all()):
return i, addon_penalty, pos.pk, 0, 0, 0, 0, (pos.subevent_id or 0), (pos.seat_id or 0) return i, addon_penalty, pos.pk, 0, 0, 0, 0, (pos.subevent_id or 0), (pos.seat_id or 0)
@@ -202,7 +203,7 @@ def get_cart(request):
'item', 'variation' 'item', 'variation'
).select_related( ).select_related(
'item', 'variation', 'subevent', 'subevent__event', 'subevent__event__organizer', 'item', 'variation', 'subevent', 'subevent__event', 'subevent__event__organizer',
'item__tax_rule' 'item__tax_rule', 'addon_to'
) )
for cp in request._cart_cache: for cp in request._cart_cache:
cp.event = request.event # Populate field with known value to save queries cp.event = request.event # Populate field with known value to save queries