def get_context_data(self, **kwargs): context = super(CategoryView, self).get_context_data(**kwargs) category = self.object data = self.request.GET context["form"] = form = ProductListForm(request=self.request, shop=self.request.shop, category=category, data=data) form.full_clean() data = form.cleaned_data if "sort" in form.fields and not data.get("sort"): # Use first choice by default data["sort"] = form.fields["sort"].widget.choices[0][0] # TODO: Check if context cache can be utilized here products = Product.objects.listed( customer=self.request.customer, shop=self.request.shop).filter( **self.get_product_filters()).filter( get_query_filters(self.request, category, data=data)) products = get_product_queryset(products, self.request, category, data).distinct() products = post_filter_products(self.request, category, products, data) products = cache_product_things(self.request, products) products = sort_products(self.request, category, products, data) context["page_size"] = data.get("limit", 12) context["products"] = products if "supplier" in data: context["supplier"] = data.get("supplier") return context
def get_context_data(context, request, category, product_filters): data = request.GET context["form"] = form = ProductListForm( request=request, shop=request.shop, category=category, data=data) form.full_clean() data = form.cleaned_data if "sort" in form.fields and not data.get("sort"): # Use first choice by default data["sort"] = form.fields["sort"].widget.choices[0][0] # TODO: Check if context cache can be utilized here products = Product.objects.listed( customer=request.customer, shop=request.shop ).filter( **product_filters ).filter(get_query_filters(request, category, data=data)) products = get_product_queryset(products, request, category, data).distinct() products = post_filter_products(request, category, products, data) products = cache_product_things(request, products) products = sort_products(request, category, products, data) context["page_size"] = data.get("limit", 12) context["products"] = products if "supplier" in data: context["supplier"] = data.get("supplier") return context
def get_context_data(context, request, category, product_filters): data = request.GET context["form"] = form = ProductListForm(request=request, shop=request.shop, category=category, data=data) form.full_clean() data = form.cleaned_data if "sort" in form.fields and not data.get("sort"): # Use first choice by default data["sort"] = form.fields["sort"].widget.choices[0][0] # TODO: Check if context cache can be utilized here products = (Product.objects.listed( customer=request.customer, shop=request.shop).filter(**product_filters).filter( get_query_filters(request, category, data=data)).prefetch_related( "sales_unit", "sales_unit__translations")) products = get_product_queryset(products, request, category, data).distinct() products = post_filter_products(request, category, products, data) products = cache_product_things(request, products) products = sort_products(request, category, products, data) context["page_size"] = data.get("limit", 12) context["products"] = products if "supplier" in data: context["supplier"] = data.get("supplier") return context
def get_context_data(self, **kwargs): context = super(CategoryView, self).get_context_data(**kwargs) category = self.object data = self.request.GET context["form"] = form = ProductListForm( request=self.request, shop=self.request.shop, category=category, data=data) form.full_clean() data = form.cleaned_data if "sort" in form.fields and not data.get("sort"): # Use first choice by default data["sort"] = form.fields["sort"].widget.choices[0][0] # TODO: Check if context cache can be utilized here products = Product.objects.listed( customer=self.request.customer, shop=self.request.shop ).filter( shop_products__shop=self.request.shop, variation_parent__isnull=True, shop_products__categories=category ).filter(get_query_filters(self.request, category, data=data)) products = get_product_queryset(products, self.request, category, data).distinct() products = post_filter_products(self.request, category, products, data) products = cache_product_things(self.request, products) products = sort_products(self.request, category, products, data) context["page_size"] = data.get("limit", 12) context["products"] = products return context
def get_context_data(self, **kwargs): context = super(CategoryView, self).get_context_data(**kwargs) category = self.object data = self.request.GET context["form"] = form = ProductListForm(request=self.request, shop=self.request.shop, category=category, data=data) form.full_clean() data = form.cleaned_data if "sort" in form.fields and not data.get("sort"): # Use first choice by default data["sort"] = form.fields["sort"].widget.choices[0][0] products = Product.objects.listed( customer=self.request.customer, shop=self.request.shop).filter( shop_products__shop=self.request.shop, variation_parent__isnull=True, shop_products__categories=category).filter( get_query_filters(self.request, category, data=data)) products = get_product_queryset(products, self.request, category, data).distinct() products = post_filter_products(self.request, category, products, data) products = cache_product_things(self.request, products) products = sort_products(self.request, category, products, data) context["page_size"] = data.get("limit", 12) context["products"] = products return context
def get_queryset(self): if not self.form.is_valid(): return Product.objects.none() data = self.form.cleaned_data if not (data and data.get("q")): # pragma: no cover return Product.objects.none() products = Product.objects.filter(get_query_filters(self.request, None, data=data)) return get_product_queryset(products, self.request, None, data)
def get_queryset(self): if not self.form.is_valid(): return Product.objects.none() data = self.form.cleaned_data if not (data and data.get("q")): # pragma: no cover return Product.objects.none() filters = get_query_filters(self.request, None, data=data) products = Product.objects.filter(filters).select_related( 'manufacturer', 'primary_image', 'tax_class', 'type' ).prefetch_related( 'translations', 'shop_products' ) return get_product_queryset(products, self.request, None, data)
def test_get_sorts_and_filters(rf): context = get_jinja_context() supplier = get_default_supplier() shop = get_default_shop() product1 = create_product("product1", shop, supplier, 10) product2 = create_product("product2", shop, supplier, 20) request = apply_request_middleware(rf.get("/")) queryset = Product.objects.all() cache.clear() for time in range(2): products = list(get_product_queryset(queryset, request, None, {})) assert len(products) == 2 assert product1 in products assert product2 in products
def get_queryset(self): if not self.form.is_valid(): return Product.objects.none() data = self.form.cleaned_data if not (data and data.get("q")): # pragma: no cover return Product.objects.none() catalog = ProductCatalog( ProductCatalogContext( shop=self.request.shop, user=self.request.user, contact=getattr(self.request, "customer", None), purchasable_only=True, visibility=ShopProductVisibility.SEARCHABLE, )) products = catalog.get_products_queryset().filter( Q(mode__in=ProductMode.get_parent_modes()), Q(get_query_filters(self.request, None, data=data))) products = get_product_queryset(products, self.request, None, data) products = sort_products(self.request, None, products, data) return products.distinct()
def get_context_data(context, request, category, product_filters): data = request.GET context["form"] = form = ProductListForm(request=request, shop=request.shop, category=category, data=data) form.full_clean() data = form.cleaned_data if "sort" in form.fields and not data.get("sort"): # Use first choice by default data["sort"] = form.fields["sort"].widget.choices[0][0] catalog = ProductCatalog( ProductCatalogContext( shop=request.shop, user=getattr(request, "user", None), contact=getattr(request, "customer", None), purchasable_only=True, supplier=data.get("supplier") or None, visibility=ShopProductVisibility.LISTED, )) products = (catalog.get_products_queryset().filter( **product_filters).filter( get_query_filters(request, category, data=data)).select_related( "primary_image", "sales_unit", "tax_class").prefetch_related("translations", "sales_unit__translations")) products = get_product_queryset(products, request, category, data) products = sort_products(request, category, products, data).distinct() context["page_size"] = data.get("limit", 12) context["products"] = products if "supplier" in data: context["supplier"] = data.get("supplier") return context