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_context_data(self, **kwargs): context = super(SearchView, self).get_context_data(**kwargs) context["form"] = self.form products = context["products"] if products: data = self.form.cleaned_data products = post_filter_products(self.request, None, products, data) products = cache_product_things(self.request, products) products = sort_products(self.request, None, products, data) products = [p for p in products if is_visible({"request": self.request}, p)] context["products"] = products context["no_results"] = (self.form.is_valid() and not 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() 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