refactored method to get similar list on entities (see todo: establishment/models.py)
This commit is contained in:
parent
f6dac3cbcd
commit
2fb338bc59
|
|
@ -253,8 +253,9 @@ class EstablishmentQuerySet(models.QuerySet):
|
|||
return Subquery(
|
||||
self.similar_base(establishment)
|
||||
.filter(**filters)
|
||||
.order_by('distance')[:settings.LIMITING_QUERY_OBJECTS]
|
||||
.values('id')
|
||||
.order_by('distance')
|
||||
.distinct()
|
||||
.values_list('id', flat=True)[:settings.LIMITING_QUERY_OBJECTS]
|
||||
)
|
||||
|
||||
def similar_restaurants(self, restaurant):
|
||||
|
|
@ -271,7 +272,8 @@ class EstablishmentQuerySet(models.QuerySet):
|
|||
'establishment_gallery__is_main': True,
|
||||
}
|
||||
)
|
||||
return self.filter(id__in=ids_by_subquery) \
|
||||
# todo: fix this - replace ids_by_subquery.queryset on ids_by_subquery
|
||||
return self.filter(id__in=ids_by_subquery.queryset) \
|
||||
.annotate_intermediate_public_mark() \
|
||||
.annotate_mark_similarity(mark=restaurant.public_mark) \
|
||||
.order_by('mark_similarity') \
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ class EstablishmentListView(EstablishmentMixinView, generics.ListAPIView):
|
|||
class EstablishmentSimilarView(EstablishmentListView):
|
||||
"""Resource for getting a list of similar establishments."""
|
||||
serializer_class = serializers.EstablishmentSimilarSerializer
|
||||
pagination_class = PortionPagination
|
||||
pagination_class = None
|
||||
|
||||
def get_base_object(self):
|
||||
"""
|
||||
|
|
@ -105,7 +105,7 @@ class RestaurantSimilarListView(EstablishmentSimilarView):
|
|||
base_establishment = self.get_base_object()
|
||||
|
||||
if base_establishment:
|
||||
return qs.similar_restaurants(base_establishment)
|
||||
return qs.similar_restaurants(base_establishment)[:settings.QUERY_OUTPUT_OBJECTS]
|
||||
else:
|
||||
return EstablishmentMixinView.get_queryset(self) \
|
||||
.none()
|
||||
|
|
@ -120,7 +120,7 @@ class WinerySimilarListView(EstablishmentSimilarView):
|
|||
base_establishment = self.get_base_object()
|
||||
|
||||
if base_establishment:
|
||||
return qs.similar_wineries(base_establishment)
|
||||
return qs.similar_wineries(base_establishment)[:settings.QUERY_OUTPUT_OBJECTS]
|
||||
else:
|
||||
return qs.none()
|
||||
|
||||
|
|
@ -134,7 +134,7 @@ class ArtisanProducerSimilarListView(EstablishmentSimilarView):
|
|||
base_establishment = self.get_base_object()
|
||||
|
||||
if base_establishment:
|
||||
return qs.similar_artisans_producers(base_establishment)
|
||||
return qs.similar_artisans_producers(base_establishment)[:settings.QUERY_OUTPUT_OBJECTS]
|
||||
else:
|
||||
return qs.none()
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,13 @@
|
|||
"""Product app views."""
|
||||
from rest_framework import generics, permissions
|
||||
from django.conf import settings
|
||||
from django.shortcuts import get_object_or_404
|
||||
from product.models import Product
|
||||
from rest_framework import generics, permissions
|
||||
|
||||
from comment.models import Comment
|
||||
from product import filters, serializers
|
||||
from comment.serializers import CommentRUDSerializer
|
||||
from product import filters, serializers
|
||||
from product.models import Product
|
||||
from utils.views import FavoritesCreateDestroyMixinView
|
||||
from utils.pagination import PortionPagination
|
||||
|
||||
|
||||
class ProductBaseView(generics.GenericAPIView):
|
||||
|
|
@ -35,7 +36,15 @@ class ProductListView(ProductBaseView, generics.ListAPIView):
|
|||
class ProductSimilarView(ProductListView):
|
||||
"""Resource for getting a list of similar product."""
|
||||
serializer_class = serializers.ProductBaseSerializer
|
||||
pagination_class = PortionPagination
|
||||
pagination_class = None
|
||||
|
||||
def get_base_object(self):
|
||||
"""
|
||||
Return base product instance for a getting list of similar products.
|
||||
"""
|
||||
product = get_object_or_404(Product.objects.all(),
|
||||
slug=self.kwargs.get('slug'))
|
||||
return product
|
||||
|
||||
|
||||
class ProductDetailView(ProductBaseView, generics.RetrieveAPIView):
|
||||
|
|
@ -95,7 +104,10 @@ class SimilarListView(ProductSimilarView):
|
|||
|
||||
def get_queryset(self):
|
||||
"""Overridden get_queryset method."""
|
||||
return super().get_queryset() \
|
||||
.has_location() \
|
||||
.similar(slug=self.kwargs.get('slug'))
|
||||
qs = super(SimilarListView, self).get_queryset()
|
||||
base_product = self.get_base_object()
|
||||
|
||||
if base_product:
|
||||
return qs.has_location().similar(slug=self.kwargs.get('slug'))[:settings.QUERY_OUTPUT_OBJECTS]
|
||||
else:
|
||||
return qs.none()
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user