You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

151 lines
5.8 KiB

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 core.views import ProtectedListView
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'
title = _('Продукт')
class ProductListView(ListView):
model = Product
form = ProductSearchForm
template_name = 'products/product_list.html'
context_object_name = 'products'
paginate_by = settings.DEFAULT_PAGE_AMOUNT
title = _('Список товаров')
def get_title(self):
if self.request.GET.get('name'):
return _('Поиск товара') + ":" + self.request.GET.get('name')
title = _('Список товаров')
if self.request.resolver_match.kwargs.get('category_slug'):
return title + ":" + self.request.resolver_match.kwargs.get('category_slug')
return title
def get_queryset(self):
qs = super().get_queryset()
if self.kwargs.get('category_slug'):
qs = qs.filter(category__slug=self.kwargs.get('category_slug'))
if self.request.GET.get('name'):
qs = qs.filter(name__icontains=self.request.GET.get('name'))
return qs
def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(object_list=object_list, **kwargs)
context['title'] = self.get_title()
return context
# 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'