diff --git a/products/views.py b/products/views.py index f2288fb..ad1a410 100644 --- a/products/views.py +++ b/products/views.py @@ -138,24 +138,23 @@ def product_search(request): if query_string is None: return Response({"errors": {"details": "No query string to parse"}}) try: - chunks = query_string.split(' ') - + # save results result_set = set() - for chunk in chunks: - # search in name - name_search = Q(name=chunk) - description_search = Q(description=chunk) - tags_search = Q(tags=chunk) - category_search = Q(category=chunk) - attributes_search = Q(attributes=chunk) - - query_list = [name_search, description_search, tags_search, category_search, attributes_search] - - products = Product.objects.filter(reduce(operator.or_, query_list)) - - for item in products: - result_set.add(item) - + # split query string into single words + chunks = query_string.split(' ') + # create search queries + name_search = Q(name__in=chunks) + description_search = Q(description__in=chunks) + tags_search = Q(tags__in=chunks) + category_search = Q(category__in=chunks) + attributes_search = Q(attributes__in=chunks) + query_list = [name_search, description_search, tags_search, category_search, attributes_search] + # get instances + products = Product.objects.filter(reduce(operator.or_, query_list)) + # add to set + for item in products: + result_set.add(item) + # serialize and respond data = serializers.serialize('json', result_set) return Response(data=data) except Exception as e: