diff --git a/filters.py b/filters.py index 3f6c308..10cd7c6 100644 --- a/filters.py +++ b/filters.py @@ -217,16 +217,12 @@ class FacetFilter(BaseFilterBackend): def assign_view_facets(self, request, view): if not hasattr(view, 'facets'): if view.category: - kwquery_1 = {} - kwquery_1['category__id'] = view.category.id - if view.category.tn_descendants_pks: - kwquery_2 = {} - kwquery_2['category__id__in'] = view.category.tn_descendants_pks.split(',') - view.facets = Facet.objects.filter(Q(**kwquery_1) | Q(**kwquery_2)) + 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') else: - view.facets = Facet.objects.filter(**kwquery_1) + view.facets = Facet.objects.filter(category__id=view.category.id).prefetch_related('facet_tags') else: - view.facets = {} + view.facets = Facet.objects.filter(category__tn_level=1).prefetch_related('facet_tags') def get_filters_dict(self, request, view): """ @@ -247,7 +243,7 @@ class FacetFilter(BaseFilterBackend): if facet.slug in request.query_params.keys(): filters_dict[facet.slug] = set(request.query_params[facet.slug].split(',')) else: - filters_dict[facet.slug] = [] + filters_dict[facet.slug] = set({}) # Append the facets object and the tags dict in the view for later reference view.tags = filters_dict @@ -276,9 +272,13 @@ class FacetFilter(BaseFilterBackend): for facet in view.facets: if facet.slug in request.query_params.keys() and request.query_params[facet.slug]: tag_filterlist = request.query_params.get(facet.slug) - kwquery = {} - kwquery[self.facet_tag_field+'__slug__in'] = tag_filterlist.replace(' ','').split(',') - queryset = queryset.filter(**kwquery) + if tag_filterlist == '': + # If the tag filterlist is empty then we're not filtering against it, it's like having all the tags of the facet selected + pass + else: + kwquery = {} + kwquery[self.facet_tag_field+'__slug__in'] = tag_filterlist.replace(' ','').split(',') + queryset = queryset.filter(**kwquery) return queryset