import json import decimal from django.conf import settings from django.shortcuts import render from django.contrib import auth from django.utils.translation import ugettext_lazy as _ from django.views.generic import ListView, DetailView from .models import ( Manufacturer,Product,ProductCategory ) from .forms import * class ManufactureListView(ListView): model = Manufacturer template_name = 'products/manufacture_list.html' class ProductDetailsView(DetailView): model = Product template_name = 'products/product_detail.html' class ProductSearchView(ListView): model = Product template_name = 'products/product_search.html' context_object_name = 'products' paginate_by = settings.DEFAULT_PAGE_AMMOUNT title = _('Поиск товара') def get_queryset(self): queryset = super().get_queryset() if self.kwargs.get('name'): queryset = queryset.filter(name__icontains=self.kwargs.get('name')) return queryset def get_context_data(self, *, object_list=None, **kwargs): context = super().get_context_data(object_list=object_list, **kwargs) context['title'] = self.title + ":" + self.request.GET.get('name', '') return context class ProductListView(ListView): model = Product template_name = 'products/product_list.html' context_object_name = 'products' paginate_by = settings.DEFAULT_PAGE_AMMOUNT title = _('Список товаров') def get_queryset(self): queryset = super().get_queryset() return queryset def get_context_data(self, *, object_list=None, **kwargs): context = super().get_context_data(object_list=object_list, **kwargs) context['title'] = self.title return context class ProductCategoryListView(ListView): model = ProductCategory template_name = 'products/product_category_list.html' # Uncomment for elasticsearch # from .layout import FacetedProductSearchForm # from haystack.generic_views import FacetedSearchView as BaseFacetedSearchView # from haystack.query import SearchQuerySet def serialize_decimal(obj): if isinstance(obj, decimal.Decimal): return str(obj) return json.JSONEncoder.default(obj) def producerslist(request): username = auth.get_user(request).username # category = None # categories = ProductCategory.objects.filter(level__lte=0) # products = Product.objects.filter(is_active=True) producers = Manufacturer.objects.filter(is_active=True) # if category_slug: # category = get_object_or_404(ProductCategory, slug=category_slug) # products = products.filter(category__in=category.get_descendants(include_self=True)) return render(request, 'products/list.html', locals()) # def categorieslist(request, producer_slug, category_slug=None): # username = accounts_ext.get_user(request).username # producer = Producer.objects.get(slug=producer_slug) # if category_slug: # _categories = ProductCategory.objects.filter(is_active=True, parent=category_slug) # else: # _categories = ProductCategory.objects.filter(is_active=True, producer=producer, level__lte=0) # categories, products = expand_categories(_categories) # return render(request, 'products/categorieslist.html', {'username': username, 'categories':categories, # 'products': products}) # # def categorieslist(request, path, instance, producer_slug): # username = auth.get_user(request).username # if instance: # _categories = instance.get_children() # else: # _categories = get_list_or_404(ProductCategory, producer__slug=producer_slug, level__lte=0) # if _categories: # categories, products = expand_categories(_categories) # else: # return productslist(request, producer_slug, instance.slug) # return render( # request, # 'products/categorieslist.html', # { # 'username': username, # 'instance': instance, # 'categories': categories, # 'producer_slug': producer_slug, # 'products': products # } # ) # # def productslist(request, producer_slug, category_slug): # username = auth.get_user(request).username # category = ProductCategory.objects.get(slug=category_slug) # products = Product.objects.filter(is_active=True, category=category) # return render(request, 'products/productslist.html', locals()) # # def product(request, product_slug): # username = auth.get_user(request).username # product = get_object_or_404(Product, slug=product_slug, is_active=True) # cart_product_form = CartAddProductForm() # variant_picker_data = get_variant_picker_data(product) # show_variant_picker = all([v.attributes for v in product.variants.all()]) # # session_key = request.session.session_key # # if not session_key: # # request.session.cycle_key() # # return render(request, 'products/product.html', {'username': username, 'products': product, 'form': cart_product_form, # 'show_variant_picker': show_variant_picker, # 'variant_picker_data': variant_picker_data, # }) # Uncomment for elasticsearch # def autocomplete(request): # sqs = SearchQuerySet().autocomplete(content_auto=request.GET.get('query', ''))[:5] # s = [] # for result in sqs: # print(result) # d = {"value": result.name, "data": result.object.slug} # s.append(d) # output = {'suggestions': s} # return JsonResponse(output) # # class FacetedSearchView(BaseFacetedSearchView): # form_class = FacetedProductSearchForm # facet_fields = ['category', 'producer'] # template_name = 'search/search.html' # paginate_by = 3 # context_object_name = 'object_list'