From 5e5d2832cdacc352a49f08c22834d7d2f49024c6 Mon Sep 17 00:00:00 2001 From: "a.gorbunov" Date: Tue, 14 Jan 2020 13:39:25 +0000 Subject: [PATCH 1/3] fix sort by product type --- apps/product/models.py | 7 +++++++ apps/product/urls/common.py | 15 +++++++++------ apps/product/views/common.py | 13 ++++++++++--- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/apps/product/models.py b/apps/product/models.py index b8195fa8..d31e2477 100644 --- a/apps/product/models.py +++ b/apps/product/models.py @@ -38,6 +38,13 @@ class ProductType(TypeDefaultImageMixin, TranslatedFieldsMixin, ProjectBaseMixin (SOUVENIR, 'souvenir'), (BOOK, 'book') ) + + INDEX_PLURAL_ONE = { + 'food': 'food', + 'wines': 'wine', + 'liquors': 'liquor', + } + name = TJSONField(blank=True, null=True, default=None, verbose_name=_('Name'), help_text='{"en-GB":"some text"}') index_name = models.CharField(max_length=50, unique=True, db_index=True, diff --git a/apps/product/urls/common.py b/apps/product/urls/common.py index 4d64b93e..fe0fcd66 100644 --- a/apps/product/urls/common.py +++ b/apps/product/urls/common.py @@ -19,10 +19,13 @@ urlpatterns = [ # similar products by type/subtype # temporary uses single mechanism, bec. description in process - path('slug//similar/wines/', views.SimilarListView.as_view(), - name='similar-wine'), - path('slug//similar/liquors/', views.SimilarListView.as_view(), - name='similar-liquor'), - path('slug//similar/food/', views.SimilarListView.as_view(), - name='similar-food'), + # path('slug//similar/wines/', views.SimilarListView.as_view(), + # name='similar-wine'), + # path('slug//similar/liquors/', views.SimilarListView.as_view(), + # name='similar-liquor'), + # path('slug//similar/food/', views.SimilarListView.as_view(), + # name='similar-food'), + + path('slug//similar//', views.SimilarListView.as_view(), + name='similar-products') ] diff --git a/apps/product/views/common.py b/apps/product/views/common.py index 34990cc3..e723b3de 100644 --- a/apps/product/views/common.py +++ b/apps/product/views/common.py @@ -6,7 +6,7 @@ from rest_framework import generics, permissions from comment.models import Comment from comment.serializers import CommentRUDSerializer from product import filters, serializers -from product.models import Product +from product.models import Product, ProductType from utils.views import FavoritesCreateDestroyMixinView from utils.pagination import PortionPagination from django.conf import settings @@ -44,8 +44,15 @@ class ProductSimilarView(ProductListView): """ Return base product instance for a getting list of similar products. """ - product = get_object_or_404(Product.objects.all(), - slug=self.kwargs.get('slug')) + if isinstance(self.kwargs.get('type'), str): + if not self.kwargs.get('type') in ProductType.INDEX_PLURAL_ONE: + return None + product_type = get_object_or_404(ProductType.objects.all(), index_name=ProductType.INDEX_PLURAL_ONE[self.kwargs.get('type')]) + product = get_object_or_404(Product.objects.all(), + slug=self.kwargs.get('slug'), product_type=product_type) + else: + product = get_object_or_404(Product.objects.all(), + slug=self.kwargs.get('slug')) return product From 9edd3fef182b985c764f61be4eb5557b0d2cde48 Mon Sep 17 00:00:00 2001 From: "a.gorbunov" Date: Tue, 14 Jan 2020 13:48:55 +0000 Subject: [PATCH 2/3] cleanup code --- apps/product/views/common.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/product/views/common.py b/apps/product/views/common.py index e723b3de..e384a248 100644 --- a/apps/product/views/common.py +++ b/apps/product/views/common.py @@ -44,15 +44,16 @@ class ProductSimilarView(ProductListView): """ Return base product instance for a getting list of similar products. """ + find_by = { + 'slug': self.kwargs.get('slug'), + } + if isinstance(self.kwargs.get('type'), str): if not self.kwargs.get('type') in ProductType.INDEX_PLURAL_ONE: return None - product_type = get_object_or_404(ProductType.objects.all(), index_name=ProductType.INDEX_PLURAL_ONE[self.kwargs.get('type')]) - product = get_object_or_404(Product.objects.all(), - slug=self.kwargs.get('slug'), product_type=product_type) - else: - product = get_object_or_404(Product.objects.all(), - slug=self.kwargs.get('slug')) + find_by['product_type'] = get_object_or_404(ProductType.objects.all(), index_name=ProductType.INDEX_PLURAL_ONE[self.kwargs.get('type')]) + + product = get_object_or_404(Product.objects.all(), **find_by) return product @@ -117,6 +118,6 @@ class SimilarListView(ProductSimilarView): base_product = self.get_base_object() if base_product: - return qs.has_location().similar(base_product)[:settings.QUERY_OUTPUT_OBJECTS] + return qs.similar(base_product)[:settings.QUERY_OUTPUT_OBJECTS] else: return qs.none() From 7c9d9e8ed199c7be20b6faccf58ff3e4aca8b78a Mon Sep 17 00:00:00 2001 From: "a.gorbunov" Date: Tue, 14 Jan 2020 13:51:01 +0000 Subject: [PATCH 3/3] filter by location --- apps/product/views/common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/product/views/common.py b/apps/product/views/common.py index e384a248..8b0567b2 100644 --- a/apps/product/views/common.py +++ b/apps/product/views/common.py @@ -118,6 +118,6 @@ class SimilarListView(ProductSimilarView): base_product = self.get_base_object() if base_product: - return qs.similar(base_product)[:settings.QUERY_OUTPUT_OBJECTS] + return qs.has_location().similar(base_product)[:settings.QUERY_OUTPUT_OBJECTS] else: return qs.none()