Example #1
0
File: views.py Project: gridl/qexx
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)
                                                 })
Example #2
0
File: views.py Project: gridl/qexx
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)
                                                     })
Example #3
0
    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
Example #4
0
File: models.py Project: gridl/qexx
    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
Example #5
0
File: views.py Project: gridl/qexx
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()})
Example #6
0
    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
Example #7
0
File: models.py Project: gridl/qexx
    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
Example #8
0
File: views.py Project: gridl/qexx
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)
                                                             })