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