|
|
|
|
@@ -2,7 +2,6 @@ from django_filters import rest_framework as filters
|
|
|
|
|
from django.contrib.postgres.search import TrigramSimilarity
|
|
|
|
|
from django.db.models.functions import Concat
|
|
|
|
|
from django.db.models import CharField
|
|
|
|
|
from shop.models.product import Product, Facet
|
|
|
|
|
from rest_framework.filters import BaseFilterBackend
|
|
|
|
|
import operator
|
|
|
|
|
from django.template import loader
|
|
|
|
|
@@ -216,13 +215,20 @@ class FacetFilter(BaseFilterBackend):
|
|
|
|
|
|
|
|
|
|
def assign_view_facets(self, request, view):
|
|
|
|
|
if not hasattr(view, 'facets'):
|
|
|
|
|
if hasattr(view, 'facet_class'):
|
|
|
|
|
self.facet_class = self.get_facet_class(view, request)
|
|
|
|
|
|
|
|
|
|
assert self.facet_class is not None, (
|
|
|
|
|
f"{view.__class__.__name__} should include a `facet_class` attribute"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if view.category:
|
|
|
|
|
if view.category.tn_ancestors_pks:
|
|
|
|
|
view.facets = Facet.objects.filter(Q(category__id=view.category.id) | Q(category__id__in=view.category.tn_ancestors_pks.split(','))).prefetch_related('facet_tags')
|
|
|
|
|
view.facets = self.facet_class.objects.filter(Q(category__id=view.category.id) | Q(category__id__in=view.category.tn_ancestors_pks.split(','))).prefetch_related('facet_tags')
|
|
|
|
|
else:
|
|
|
|
|
view.facets = Facet.objects.filter(category__id=view.category.id).prefetch_related('facet_tags')
|
|
|
|
|
view.facets = self.facet_class.objects.filter(category__id=view.category.id).prefetch_related('facet_tags')
|
|
|
|
|
else:
|
|
|
|
|
view.facets = Facet.objects.filter(category__tn_level=1).prefetch_related('facet_tags')
|
|
|
|
|
view.facets = self.facet_class.objects.filter(category__tn_level=1).prefetch_related('facet_tags')
|
|
|
|
|
|
|
|
|
|
def get_filters_dict(self, request, view):
|
|
|
|
|
"""
|
|
|
|
|
|