From 64fa4eb34bc54112e70eeaef95b29d8a8c2b1466 Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 19 Feb 2021 12:12:33 +0000 Subject: [PATCH] added search result serializer, search results ordered by rank --- products/serializers.py | 12 ++++++++++++ products/views.py | 7 +++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/products/serializers.py b/products/serializers.py index a6cc29b..769c7c9 100644 --- a/products/serializers.py +++ b/products/serializers.py @@ -17,6 +17,18 @@ class ProductSerializer(TaggitSerializer, serializers.ModelSerializer): exclude = ['created', 'updated', 'creator'] +class SearchResultSerializer(TaggitSerializer, serializers.ModelSerializer): + + tags = TagListSerializerField(required=False) + category = SingleTagSerializerField(required=False) # main tag category + attributes = TagListSerializerField(required=False) + rank = serializers.FloatField() + + class Meta: + model = Product + exclude = ['created', 'updated', 'creator'] + + class TagFilterSerializer(TaggitSerializer, serializers.ModelSerializer): tags = TagListSerializerField(required=False) diff --git a/products/views.py b/products/views.py index e2f3df4..39466da 100644 --- a/products/views.py +++ b/products/views.py @@ -19,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 +from products.serializers import ProductSerializer, TagFilterSerializer, SearchResultSerializer from companies.models import Company from history.models import HistorySync @@ -167,8 +167,7 @@ def product_search(request): 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}) + serializer = SearchResultSerializer(ranked_products, many=True) + return Response(data={"filters": filters, "products": [dict(i) for i in serializer.data]}) except Exception as e: return Response({"errors": {"details": str(e)}}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)