Do not create cart ID for every shop page visitor

This commit is contained in:
Raphael Michel
2018-03-10 14:04:23 +01:00
parent 6a61a113b0
commit b379c8380d
2 changed files with 20 additions and 10 deletions

View File

@@ -124,8 +124,10 @@ class CartMixin:
if order: if order:
fees = order.fees.all() fees = order.fees.all()
else: elif positions:
fees = get_fees(self.request.event, self.request, total, self.invoice_address, self.cart_session.get('payment')) fees = get_fees(self.request.event, self.request, total, self.invoice_address, self.cart_session.get('payment'))
else:
fees = []
total += sum([f.value for f in fees]) total += sum([f.value for f in fees])
net_total += sum([f.net_value for f in fees]) net_total += sum([f.net_value for f in fees])
@@ -169,14 +171,18 @@ def get_cart(request):
from pretix.presale.views.cart import get_or_create_cart_id from pretix.presale.views.cart import get_or_create_cart_id
if not hasattr(request, '_cart_cache'): if not hasattr(request, '_cart_cache'):
request._cart_cache = CartPosition.objects.filter( cart_id = get_or_create_cart_id(request, create=False)
cart_id=get_or_create_cart_id(request), event=request.event if not cart_id:
).order_by( request._cart_cache = CartPosition.objects.none()
'item', 'variation' else:
).select_related( request._cart_cache = CartPosition.objects.filter(
'item', 'variation', 'subevent', 'subevent__event', 'subevent__event__organizer', cart_id=cart_id, event=request.event
'item__tax_rule' ).order_by(
) 'item', 'variation'
).select_related(
'item', 'variation', 'subevent', 'subevent__event', 'subevent__event__organizer',
'item__tax_rule'
)
return request._cart_cache return request._cart_cache

View File

@@ -184,7 +184,7 @@ def create_empty_cart_id(request, replace_current=True):
return new_id return new_id
def get_or_create_cart_id(request): def get_or_create_cart_id(request, create=True):
""" """
This method returns the cart ID in use for this request or creates a new cart ID if required. This method returns the cart ID in use for this request or creates a new cart ID if required.
@@ -232,6 +232,8 @@ def get_or_create_cart_id(request):
This method migrates legacy sessions created before the upgrade to 1.8.0 on a best-effort basis, This method migrates legacy sessions created before the upgrade to 1.8.0 on a best-effort basis,
meaning that the migration does not respect plugin-specific data and works best if the user only meaning that the migration does not respect plugin-specific data and works best if the user only
used the session for one event at the time of migration. used the session for one event at the time of migration.
If ``create`` is ``False`` and no session currently exists, ``None`` will be returned.
""" """
session_keyname = 'current_cart_event_{}'.format(request.event.pk) session_keyname = 'current_cart_event_{}'.format(request.event.pk)
prefix = '' prefix = ''
@@ -254,6 +256,8 @@ def get_or_create_cart_id(request):
if prefix and 'take_cart_id' in request.GET and current_id: if prefix and 'take_cart_id' in request.GET and current_id:
new_id = current_id new_id = current_id
else: else:
if not create:
return None
new_id = generate_cart_id(prefix=prefix) new_id = generate_cart_id(prefix=prefix)
# Migrate legacy data # Migrate legacy data