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.
162 lines
5.9 KiB
162 lines
5.9 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 .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_AMOUNT
|
|
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_AMOUNT
|
|
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'
|
|
|