diff --git a/products/tests.py b/products/tests.py index d0f979b..7d1c462 100644 --- a/products/tests.py +++ b/products/tests.py @@ -780,9 +780,9 @@ class ProductSearchTest(TestCase): def test_anon_user_can_filter_by_category(self): expected_instances = [ - self.factory(tags="lunares/rojos", category='ropa/nueva', description="zapatos verdes", discount=None), - self.factory(tags="lunares/rojos", category="ropa/nueva", discount=0.00), - self.factory(attributes='"zapatos de campo", tono/rojo', category="ropa/nueva", discount=9.00), + self.factory(tags="lunares/rojos", category='nueva', description="zapatos verdes", discount=None), + self.factory(tags="lunares/rojos", category="ropa", discount=0.00), + self.factory(attributes='"zapatos de campo", tono/rojo', category="ropa", discount=9.00), ] unexpected_instances = [ self.factory(description="chanclas", tags='rojos'), @@ -790,7 +790,7 @@ class ProductSearchTest(TestCase): ] q = quote("zapatos rojos") - url = f"{self.endpoint}?q={q}&category=ropa/nueva" + url = f"{self.endpoint}?q={q}&category=ropa&category=nueva" # send in request response = self.client.get(url) # check response diff --git a/products/utils.py b/products/utils.py index 1d53c49..eba2d0b 100644 --- a/products/utils.py +++ b/products/utils.py @@ -124,7 +124,7 @@ def get_related_products(product): return total_results[:10] -def ranked_product_search(keyword, shipping_cost=None, discount=None, category=None, tags=None, price_min=None,price_max=None): +def ranked_product_search(keyword, shipping_cost=None, discount=None, categories=None, tags=None, price_min=None,price_max=None): """ Ranked product search @@ -135,7 +135,7 @@ def ranked_product_search(keyword, shipping_cost=None, discount=None, category=N allow filtering by: - shipping cost """ - vector = SearchVector('name') + SearchVector('description') + SearchVector('tags__label') + SearchVector('attributes__label') + SearchVector('category__label') + SearchVector('company__company_name') + vector = SearchVector('name') + SearchVector('description') + SearchVector('tags__label') + SearchVector('attributes__label') + SearchVector('category__name') + SearchVector('company__company_name') query = SearchQuery(keyword) products_qs = Product.objects.annotate( @@ -143,8 +143,8 @@ def ranked_product_search(keyword, shipping_cost=None, discount=None, category=N ).filter(rank__gt=0.05, active=True) # filter by category - if category is not None: - products_qs = products_qs.filter(category__name__in=category) + if categories is not None: + products_qs = products_qs.filter(category__name__in=categories) # filter by tags if tags is not None: diff --git a/products/views.py b/products/views.py index 13e90ad..75776be 100644 --- a/products/views.py +++ b/products/views.py @@ -162,7 +162,7 @@ def product_search(request): else: discount = None # category = request.GET.get('category', None) - category = request.query_params.getlist('category[]') or None + categories = request.query_params.getlist('category') or None tags = request.GET.get('tags', None) price_min = request.GET.get('price_min', None) price_max = request.GET.get('price_max', None) @@ -185,8 +185,8 @@ def product_search(request): products_qs = Product.objects.filter(active=True) if tags: products_qs = Product.objects.filter(tags=tags) - if category: - products_qs = Product.objects.filter(category__name__in=category) + if categories: + products_qs = Product.objects.filter(category__name__in=categories) # serialize and list data serializer = ProductSerializer(products_qs, many=True) result_list = [dict(i) for i in serializer.data] @@ -194,7 +194,7 @@ def product_search(request): # split query string into single words chunks = q.split(' ') for chunk in chunks: - product_set, min_price, max_price = ranked_product_search(chunk, shipping_cost, discount, category, tags, price_min, price_max) + product_set, min_price, max_price = ranked_product_search(chunk, shipping_cost, discount, categories, tags, price_min, price_max) # update price values if product_set: if prices['min'] is None or min_price['price__min'] < prices['min']: