From 1a57d0edd830e7c16d9301641111bd61ff6a1e65 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Fri, 29 Nov 2019 13:46:20 +0300 Subject: [PATCH] Paginator custom facets code optimization --- apps/search_indexes/filters.py | 3 ++- apps/search_indexes/views.py | 28 ++++------------------------ 2 files changed, 6 insertions(+), 25 deletions(-) diff --git a/apps/search_indexes/filters.py b/apps/search_indexes/filters.py index c1f8a578..c85b1ad0 100644 --- a/apps/search_indexes/filters.py +++ b/apps/search_indexes/filters.py @@ -23,6 +23,7 @@ class CustomFacetedSearchFilterBackend(FacetedSearchFilterBackend): return cur_facet['facet']._params['field'] != next(iter(x._params)) return myfilter __facets = self.construct_facets(request, view) + setattr(view.paginator, 'facets_computed', {}) for __field, __facet in iteritems(__facets): agg = __facet['facet'].get_aggregation() agg_filter = Q('match_all') @@ -50,7 +51,7 @@ class CustomFacetedSearchFilterBackend(FacetedSearchFilterBackend): 'filter', filter=agg_filter ).bucket(__field, agg) - self.facets_computed.update({facet_name: qs.execute().aggregations[facet_name]}) + view.paginator.facets_computed.update({facet_name: qs.execute().aggregations[facet_name]}) return queryset diff --git a/apps/search_indexes/views.py b/apps/search_indexes/views.py index e2404fbb..74cd4649 100644 --- a/apps/search_indexes/views.py +++ b/apps/search_indexes/views.py @@ -4,6 +4,7 @@ from django_elasticsearch_dsl_drf import constants from django_elasticsearch_dsl_drf.filter_backends import ( FilteringFilterBackend, GeoSpatialFilteringFilterBackend, + GeoSpatialOrderingFilterBackend, ) from elasticsearch_dsl import TermsFacet from django_elasticsearch_dsl_drf.viewsets import BaseDocumentViewSet @@ -26,6 +27,7 @@ class NewsDocumentViewSet(BaseDocumentViewSet): filters.CustomSearchFilterBackend, FilteringFilterBackend, filters.CustomFacetedSearchFilterBackend, + GeoSpatialOrderingFilterBackend, ] faceted_search_fields = { @@ -76,14 +78,6 @@ class NewsDocumentViewSet(BaseDocumentViewSet): }, } - def filter_queryset(self, queryset): - for backend in list(self.filter_backends): - bc = backend() - queryset = bc.filter_queryset(self.request, queryset, self) - if hasattr(bc, 'facets_computed'): - setattr(self.paginator, 'facets_computed', bc.facets_computed) - return queryset - class MobileNewsDocumentViewSet(NewsDocumentViewSet): @@ -111,6 +105,7 @@ class EstablishmentDocumentViewSet(BaseDocumentViewSet): filters.CustomSearchFilterBackend, GeoSpatialFilteringFilterBackend, filters.CustomFacetedSearchFilterBackend, + GeoSpatialOrderingFilterBackend, ] faceted_search_fields = { @@ -292,14 +287,6 @@ class EstablishmentDocumentViewSet(BaseDocumentViewSet): } } - def filter_queryset(self, queryset): - for backend in list(self.filter_backends): - bc = backend() - queryset = bc.filter_queryset(self.request, queryset, self) - if hasattr(bc, 'facets_computed'): - setattr(self.paginator, 'facets_computed', bc.facets_computed) - return queryset - class MobileEstablishmentDocumentViewSet(EstablishmentDocumentViewSet): @@ -322,6 +309,7 @@ class ProductDocumentViewSet(BaseDocumentViewSet): FilteringFilterBackend, filters.CustomSearchFilterBackend, filters.CustomFacetedSearchFilterBackend, + GeoSpatialOrderingFilterBackend, ] search_fields = { @@ -414,14 +402,6 @@ class ProductDocumentViewSet(BaseDocumentViewSet): }, } - def filter_queryset(self, queryset): - for backend in list(self.filter_backends): - bc = backend() - queryset = bc.filter_queryset(self.request, queryset, self) - if hasattr(bc, 'facets_computed'): - setattr(self.paginator, 'facets_computed', bc.facets_computed) - return queryset - class MobileProductDocumentViewSet(ProductDocumentViewSet):