예제 #1
0
파일: 53014_views.py 프로젝트: wanuop/shuup
class SearchView(ListView):
    form_class = ProductListForm
    template_name = "shuup/simple_search/search.jinja"
    model = Product
    context_object_name = "products"

    def dispatch(self, request, *args, **kwargs):
        self.form = ProductListForm(
            request=self.request, shop=self.request.shop, category=None, data=self.request.GET)
        return super(SearchView, self).dispatch(request, *args, **kwargs)

    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_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
예제 #2
0
class SearchView(ListView):
    form_class = ProductListForm
    template_name = "shuup/simple_search/search.jinja"
    model = Product
    context_object_name = "products"

    def dispatch(self, request, *args, **kwargs):
        self.form = ProductListForm(request=self.request,
                                    shop=self.request.shop,
                                    category=None,
                                    data=self.request.GET)
        return super(SearchView, self).dispatch(request, *args, **kwargs)

    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(self, **kwargs):
        context = super(SearchView, self).get_context_data(**kwargs)
        context["form"] = self.form
        products = context["products"]
        context["no_results"] = self.form.is_valid() and not products.exists()
        return context