Fixes some bugs in filters.py
This commit is contained in:
24
filters.py
24
filters.py
@@ -217,16 +217,12 @@ class FacetFilter(BaseFilterBackend):
|
|||||||
def assign_view_facets(self, request, view):
|
def assign_view_facets(self, request, view):
|
||||||
if not hasattr(view, 'facets'):
|
if not hasattr(view, 'facets'):
|
||||||
if view.category:
|
if view.category:
|
||||||
kwquery_1 = {}
|
if view.category.tn_ancestors_pks:
|
||||||
kwquery_1['category__id'] = view.category.id
|
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')
|
||||||
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))
|
|
||||||
else:
|
else:
|
||||||
view.facets = Facet.objects.filter(**kwquery_1)
|
view.facets = Facet.objects.filter(category__id=view.category.id).prefetch_related('facet_tags')
|
||||||
else:
|
else:
|
||||||
view.facets = {}
|
view.facets = Facet.objects.filter(category__tn_level=1).prefetch_related('facet_tags')
|
||||||
|
|
||||||
def get_filters_dict(self, request, view):
|
def get_filters_dict(self, request, view):
|
||||||
"""
|
"""
|
||||||
@@ -247,7 +243,7 @@ class FacetFilter(BaseFilterBackend):
|
|||||||
if facet.slug in request.query_params.keys():
|
if facet.slug in request.query_params.keys():
|
||||||
filters_dict[facet.slug] = set(request.query_params[facet.slug].split(','))
|
filters_dict[facet.slug] = set(request.query_params[facet.slug].split(','))
|
||||||
else:
|
else:
|
||||||
filters_dict[facet.slug] = []
|
filters_dict[facet.slug] = set({})
|
||||||
|
|
||||||
# Append the facets object and the tags dict in the view for later reference
|
# Append the facets object and the tags dict in the view for later reference
|
||||||
view.tags = filters_dict
|
view.tags = filters_dict
|
||||||
@@ -276,9 +272,13 @@ class FacetFilter(BaseFilterBackend):
|
|||||||
for facet in view.facets:
|
for facet in view.facets:
|
||||||
if facet.slug in request.query_params.keys() and request.query_params[facet.slug]:
|
if facet.slug in request.query_params.keys() and request.query_params[facet.slug]:
|
||||||
tag_filterlist = request.query_params.get(facet.slug)
|
tag_filterlist = request.query_params.get(facet.slug)
|
||||||
kwquery = {}
|
if tag_filterlist == '':
|
||||||
kwquery[self.facet_tag_field+'__slug__in'] = tag_filterlist.replace(' ','').split(',')
|
# If the tag filterlist is empty then we're not filtering against it, it's like having all the tags of the facet selected
|
||||||
queryset = queryset.filter(**kwquery)
|
pass
|
||||||
|
else:
|
||||||
|
kwquery = {}
|
||||||
|
kwquery[self.facet_tag_field+'__slug__in'] = tag_filterlist.replace(' ','').split(',')
|
||||||
|
queryset = queryset.filter(**kwquery)
|
||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user