Perform order search on database replica

This commit is contained in:
Raphael Michel
2019-02-14 10:15:02 +01:00
parent 7ed35e06ba
commit 6e4af5da64

View File

@@ -1,3 +1,4 @@
from django.conf import settings
from django.db.models import Count, IntegerField, OuterRef, Q, Subquery from django.db.models import Count, IntegerField, OuterRef, Q, Subquery
from django.utils.functional import cached_property from django.utils.functional import cached_property
from django.views.generic import ListView from django.views.generic import ListView
@@ -28,7 +29,7 @@ class OrderSearch(PaginationMixin, ListView):
annotated = { annotated = {
o['pk']: o o['pk']: o
for o in for o in
Order.objects.filter( Order.objects.using(settings.DATABASE_REPLICA).filter(
pk__in=[o.pk for o in ctx['orders']] pk__in=[o.pk for o in ctx['orders']]
).annotate( ).annotate(
pcnt=Subquery(s, output_field=IntegerField()) pcnt=Subquery(s, output_field=IntegerField())
@@ -45,7 +46,7 @@ class OrderSearch(PaginationMixin, ListView):
return ctx return ctx
def get_queryset(self): def get_queryset(self):
qs = Order.objects.select_related('invoice_address') qs = Order.objects.select_related('invoice_address').using(settings.DATABASE_REPLICA)
if not self.request.user.has_active_staff_session(self.request.session.session_key): if not self.request.user.has_active_staff_session(self.request.session.session_key):
qs = qs.filter( qs = qs.filter(