mirror of
https://github.com/pretix/pretix.git
synced 2026-05-05 15:14:04 +00:00
Minor SQL performance improvements
This commit is contained in:
@@ -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():
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user