Rewrite subquery in gift card list

This commit is contained in:
Raphael Michel
2020-10-07 10:53:59 +02:00
parent 758981fc1b
commit 4f20849e4b
2 changed files with 11 additions and 4 deletions

View File

@@ -8,7 +8,9 @@ from django.contrib import messages
from django.core.exceptions import PermissionDenied, ValidationError from django.core.exceptions import PermissionDenied, ValidationError
from django.core.files import File from django.core.files import File
from django.db import transaction from django.db import transaction
from django.db.models import Count, Max, Min, Prefetch, ProtectedError, Sum from django.db.models import (
Count, Max, Min, OuterRef, Prefetch, ProtectedError, Subquery, Sum,
)
from django.db.models.functions import Coalesce, Greatest from django.db.models.functions import Coalesce, Greatest
from django.forms import DecimalField, inlineformset_factory from django.forms import DecimalField, inlineformset_factory
from django.http import JsonResponse from django.http import JsonResponse
@@ -30,7 +32,9 @@ from pretix.base.models import (
TeamInvite, User, TeamInvite, User,
) )
from pretix.base.models.event import Event, EventMetaProperty, EventMetaValue from pretix.base.models.event import Event, EventMetaProperty, EventMetaValue
from pretix.base.models.giftcards import gen_giftcard_secret from pretix.base.models.giftcards import (
GiftCardTransaction, gen_giftcard_secret,
)
from pretix.base.models.organizer import TeamAPIToken from pretix.base.models.organizer import TeamAPIToken
from pretix.base.payment import PaymentException from pretix.base.payment import PaymentException
from pretix.base.services.export import multiexport from pretix.base.services.export import multiexport
@@ -967,8 +971,11 @@ class GiftCardListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixi
context_object_name = 'giftcards' context_object_name = 'giftcards'
def get_queryset(self): def get_queryset(self):
s = GiftCardTransaction.objects.filter(
card=OuterRef('pk')
).order_by().values('card').annotate(s=Sum('value')).values('s')
qs = self.request.organizer.issued_gift_cards.annotate( qs = self.request.organizer.issued_gift_cards.annotate(
cached_value=Coalesce(Sum('transactions__value'), Decimal('0.00')) cached_value=Coalesce(Subquery(s), Decimal('0.00'))
).order_by('-issuance') ).order_by('-issuance')
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)

View File

@@ -10,7 +10,7 @@ from django.db.models.functions import Coalesce, Greatest
from django.http import Http404, HttpResponse from django.http import Http404, HttpResponse
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.utils.formats import date_format, get_format from django.utils.formats import date_format, get_format
from django.utils.timezone import now, get_current_timezone from django.utils.timezone import get_current_timezone, now
from django.views import View from django.views import View
from django.views.decorators.cache import cache_page from django.views.decorators.cache import cache_page
from django.views.generic import ListView, TemplateView from django.views.generic import ListView, TemplateView