From b1e0cccd7faac9cce68eb313bf7ceba82bf45a94 Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 19 Feb 2021 11:51:38 +0000 Subject: [PATCH] work on returning search results in order --- products/serializers.py | 11 ----------- products/tests.py | 2 +- products/views.py | 14 +++++++++----- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/products/serializers.py b/products/serializers.py index 0cd0dee..a6cc29b 100644 --- a/products/serializers.py +++ b/products/serializers.py @@ -17,17 +17,6 @@ class ProductSerializer(TaggitSerializer, serializers.ModelSerializer): exclude = ['created', 'updated', 'creator'] -class ProductSearchSerializer(TaggitSerializer, serializers.ModelSerializer): - - tags = TagListSerializerField(required=False) - category = SingleTagSerializerField(required=False) # main tag category - attributes = TagListSerializerField(required=False) - - class Meta: - model = Product - exclude = ['created', 'updated', 'creator'] - - class TagFilterSerializer(TaggitSerializer, serializers.ModelSerializer): tags = TagListSerializerField(required=False) diff --git a/products/tests.py b/products/tests.py index 4f5ad49..2fdb597 100644 --- a/products/tests.py +++ b/products/tests.py @@ -462,7 +462,7 @@ class ProductSearchTest(TestCase): def test_anon_user_can_search(self): expected_instances = [ - self.factory(tags="lunares/blancos",description="zapatos verdes"), + self.factory(tags="lunares/rojos", category='zapatos', description="zapatos verdes"), self.factory(tags="colores/rojos, tono/brillante"), self.factory(tags="lunares/azules", description="zapatos rojos"), self.factory(tags="lunares/rojos", description="zapatos"), diff --git a/products/views.py b/products/views.py index 494c5f4..e2f3df4 100644 --- a/products/views.py +++ b/products/views.py @@ -7,6 +7,7 @@ from functools import reduce from django.shortcuts import render from django.conf import settings from django.db.models import Q +from django.core import serializers # Create your views here. from rest_framework import status @@ -18,7 +19,7 @@ from rest_framework.decorators import api_view, permission_classes, action import requests from products.models import Product -from products.serializers import ProductSerializer, TagFilterSerializer, ProductSearchSerializer +from products.serializers import ProductSerializer, TagFilterSerializer from companies.models import Company from history.models import HistorySync @@ -162,9 +163,12 @@ def product_search(request): # extract filters from result_set filters = extract_search_filters(result_set) - # serialize and respond - product_serializer = ProductSearchSerializer(result_set, many=True, context={'request': request}) - # TODO: send product data in order by rank value - return Response(data={"filters": filters, "products": product_serializer.data}) + # order results and respond + result_list = list(result_set) + ranked_products = sorted(result_list, key= lambda rank:rank.rank, reverse=True) + # TODO: slice ranked_products as per pagination + import ipdb; ipdb.set_trace() + data = serializers.serialize('json', ranked_products) + return Response(data={"filters": filters, "products": data}) except Exception as e: return Response({"errors": {"details": str(e)}}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)