added search result serializer, search results ordered by rank

This commit is contained in:
Sam
2021-02-19 12:12:33 +00:00
parent b1e0cccd7f
commit 64fa4eb34b
2 changed files with 15 additions and 4 deletions

View File

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

View File

@@ -19,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 from products.serializers import ProductSerializer, TagFilterSerializer, SearchResultSerializer
from companies.models import Company from companies.models import Company
from history.models import HistorySync from history.models import HistorySync
@@ -167,8 +167,7 @@ def product_search(request):
result_list = list(result_set) result_list = list(result_set)
ranked_products = sorted(result_list, key= lambda rank:rank.rank, reverse=True) ranked_products = sorted(result_list, key= lambda rank:rank.rank, reverse=True)
# TODO: slice ranked_products as per pagination # TODO: slice ranked_products as per pagination
import ipdb; ipdb.set_trace() serializer = SearchResultSerializer(ranked_products, many=True)
data = serializers.serialize('json', ranked_products) return Response(data={"filters": filters, "products": [dict(i) for i in serializer.data]})
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)