work on returning search results in order

This commit is contained in:
Sam
2021-02-19 11:51:38 +00:00
parent e31c64eea8
commit b1e0cccd7f
3 changed files with 10 additions and 17 deletions

View File

@@ -17,17 +17,6 @@ class ProductSerializer(TaggitSerializer, serializers.ModelSerializer):
exclude = ['created', 'updated', 'creator'] 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): class TagFilterSerializer(TaggitSerializer, serializers.ModelSerializer):
tags = TagListSerializerField(required=False) tags = TagListSerializerField(required=False)

View File

@@ -462,7 +462,7 @@ class ProductSearchTest(TestCase):
def test_anon_user_can_search(self): def test_anon_user_can_search(self):
expected_instances = [ 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="colores/rojos, tono/brillante"),
self.factory(tags="lunares/azules", description="zapatos rojos"), self.factory(tags="lunares/azules", description="zapatos rojos"),
self.factory(tags="lunares/rojos", description="zapatos"), self.factory(tags="lunares/rojos", description="zapatos"),

View File

@@ -7,6 +7,7 @@ from functools import reduce
from django.shortcuts import render from django.shortcuts import render
from django.conf import settings from django.conf import settings
from django.db.models import Q from django.db.models import Q
from django.core import serializers
# Create your views here. # Create your views here.
from rest_framework import status from rest_framework import status
@@ -18,7 +19,7 @@ from rest_framework.decorators import api_view, permission_classes, action
import requests import requests
from products.models import Product from products.models import Product
from products.serializers import ProductSerializer, TagFilterSerializer, ProductSearchSerializer from products.serializers import ProductSerializer, TagFilterSerializer
from companies.models import Company from companies.models import Company
from history.models import HistorySync from history.models import HistorySync
@@ -162,9 +163,12 @@ def product_search(request):
# extract filters from result_set # extract filters from result_set
filters = extract_search_filters(result_set) filters = extract_search_filters(result_set)
# serialize and respond # order results and respond
product_serializer = ProductSearchSerializer(result_set, many=True, context={'request': request}) result_list = list(result_set)
# TODO: send product data in order by rank value ranked_products = sorted(result_list, key= lambda rank:rank.rank, reverse=True)
return Response(data={"filters": filters, "products": product_serializer.data}) # 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: except Exception as e:
return Response({"errors": {"details": str(e)}}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) return Response({"errors": {"details": str(e)}}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)