def product_new(request): # Новые products = get_pagination(request, Product.objects_detailed.order_by('-date_created'), 12) return render(request, 'products/new.html', {'products': products, 'currency': Currency.get_main_currency(), 'range': range(1, products.paginator.num_pages + 1) })
def product_popular(request): # Популярные товары products = get_pagination(request, Product.objects_detailed.filter(popular=True), 12) return render(request, 'products/popular.html', {'products': products, 'currency': Currency.get_main_currency(), 'range': range(1, products.paginator.num_pages + 1) })
def get_price_range(self): # Возвращает минимальную и максимальную цены на вариации товара currency = Currency.get_main_currency() res = PricedProduct.objects.filter(product=self, currency=currency). \ aggregate(min_price=models.Min('price'), max_price=models.Max('price')) res['currency'] = currency return res
def product_index(request): # Популярные товары popular_products = Product.objects_detailed.filter(popular=True)[:8] # Новинки new_products = Product.objects_detailed.order_by('-date_created')[:8] return render(request, 'products/product_index.html', {'popular_products': popular_products, 'new_products': new_products, 'currency': Currency.get_main_currency()})
def get_queryset(self): """ Возвращает товары, для которых указана цена в основной валюте Получает минимальную и максимальную цены на товар :return: """ qs = super(DetailedProductManager, self).get_queryset(). \ filter(prices__currency=Currency.get_main_currency()). \ annotate(min_price=models.Min('prices__price'), max_price=models.Max('prices__price')). \ prefetch_related('prices') return qs
def category_detail(request, slug): # Не показываем отсутствущие категории category = get_object_or_404(Category, slug=slug) descendants = category.get_descendants(include_self=True) # Показываем товары из дочерних категорий # Получаем минимальную и максимальную цену на товар # Не показываем товары без цены (min_price__isnull=False) # Если товар есть в нескольких подкатегориях показываем его один раз (distinct()) currency = Currency.get_main_currency() product_list = Product.objects_detailed. \ filter(categories__in=descendants). \ distinct() # ToDo: Количество товаров на странице - в настройки products = get_pagination(request, product_list, 8) return render(request, 'products/category_detail.html', {'category': category, 'products': products, 'currency': currency, 'range': range(1, products.paginator.num_pages + 1) })