def post(self, request): form = SearchForm(request.POST) if form.is_valid(): product_name = form.cleaned_data['product_name'] searched_product = Product.objects.filter(name__icontains=product_name).first() saved_product = [] if searched_product: substitutes_products = Product.objects.filter(categories=searched_product.categories.first()).exclude(id=searched_product.id).order_by('nutri_score')[:12] if request.user.is_authenticated: if ProductUsers.objects.filter(product=searched_product, user=request.user).exists(): saved_product.append(searched_product) for product in substitutes_products: if ProductUsers.objects.filter(product=product, user=request.user).exists(): saved_product.append(product) else: substitutes_products = None self.context['title'] = 'produit trouvé pour la recherche : "' + product_name + '"' self.context['searched_product'] = searched_product self.context['products'] = substitutes_products self.context['saved_product'] = saved_product return render(request, self.template_name, self.context) else: self.context['errors'] = form.errors.items() return render(request, 'products/homepage.html', self.context)
def products(request): cart = view_cart(request) products = Product.objects.all().order_by("-id") form = ProductsForm() search_form = SearchForm() if request.method == "GET": search_form = SearchForm(request.GET) if search_form.is_valid(): classification = search_form.cleaned_data['classification'] keyword = search_form.cleaned_data['keyword'] price = search_form.cleaned_data['price'] if not classification: classification = 'all' if not price: price = 'dont care' kwargs = {} if keyword: kwargs['title__icontains'] = keyword if classification != 'all': kwargs['classification'] = classification if price != 'dont care': if price == '<500': kwargs['price__lte'] = 500 elif price == '500-2000': kwargs['price__gte'] = 500 kwargs['price__lte'] = 2000 elif price == '>2000': kwargs['price__gte'] = 2000 products = Product.objects.filter(**kwargs) if request.method == "POST": form = ProductsForm(request.POST) if form.is_valid(): quantity = form.cleaned_data["quantity"] product_id = request.POST.get("product_id") add_item_to_cart(request, product_id=product_id, quantity=quantity) return HttpResponseRedirect(reverse("home")) paginator = Paginator(products, 5) page = request.GET.get('page', 1) last_page = paginator.num_pages paginator_gen_list = gen_page_list(int(page), paginator.num_pages) try: products = paginator.page(page) except PageNotAnInteger: products = paginator.page(1) except EmptyPage: products = paginator.page(paginator.num_pages) return render( request, "home.html", { "products": products, "cart": cart, "form": form, "last_page": last_page, "paginator_gen_list": paginator_gen_list, "search_form": search_form })
def product_search(request): context=dict() if request.method == 'POST': form = SearchForm(request.POST) if form.is_valid(): context['category']=Category.objects.all() search_query=form.cleaned_data['search_query'] context['products']=Product.objects.filter(title__icontains=search_query) return render(request, 'products/products_search.html', context) return HttpResponseRedirect('/')
def product_search_view(request): if request.method == 'POST': form = SearchForm(request.POST) if form.is_valid(): categories = Category.objects.all() search_query = form.cleaned_data['search_query'] products = Product.objects.filter(name__icontains=search_query) context = { 'categories': categories, 'products': products, } template = "products/products_search.html" return render(request, template, context)
def search_result(request): form = SearchForm(request.POST) if form.is_valid(): #trae el formulario sin guardarlo resultSearch = form.save(commit=False) queryResult = resultSearch.title products = Product.objects.filter(title__icontains=queryResult) return render(request, "products/search.html", { 'products': products, 'queryResult': queryResult }) else: return HttpResponseNotFound("<h1>Your search is incorrect</h1>")
def home_page(request): sliders = Slider.objects.filter(active=1) top_level_cats = Category.objects.filter(parent__isnull=True, active=1).select_related('parent') search_form = SearchForm() try: area_rug = Category.objects.get(slug__contains="area-rugs") area_rugs = Category.objects.filter(parent_id=area_rug.id, active=1).select_related('parent') except: area_rugs = [] try: bed_sheet = Category.objects.get(slug__contains="bed-sheets") bed_sheets = Product.objects.filter(category_id=bed_sheet.id)[:10].select_related('category') except: bed_sheets = [] try: towel = Category.objects.get(slug__contains="towel") towels = Product.objects.filter(category_id=towel.id)[0:10].select_related('category') except: towels= [] cart_product_form = CartAddProductForm() context ={ 'area_rugs': area_rugs, 'bed_sheets': bed_sheets, 'towels':towels, 'top_level_cats': top_level_cats, 'cart_product_form':cart_product_form, 'search_form':search_form, 'sliders':sliders, } return render(request, "home_page.html", context)
class ProductDetails(View): context = {"search_form": SearchForm()} def get(self, request, product_id): """Return the product-details template if product exists. Return 404 otherwise""" searched_product = get_object_or_404(Product, id=product_id) product_nutriments = searched_product.nutriments.all() clean_nutriments = [] for nutriment in product_nutriments: clean_nutriments.append({ "name": settings.NUTRIMENTS[nutriment.name]["name"], "unit": nutriment.unit, "quantity": ProductNutriments.objects.filter( product=searched_product, nutriment=nutriment).first().quantity, }) self.context["title"] = searched_product.name self.context["searched_product"] = searched_product self.context["product_nutriments"] = clean_nutriments return render(request, "products/product-details.html", self.context)
class UserSaveProduct(View): context = {"search_form": SearchForm()} def get(self, request, product_id): """Create/Delete a relation user-product to save/unsave a product for authenticated user and return appropriate JSON response""" product_to_save = Product.objects.get(id=product_id) if not ProductUsers.objects.filter(product=product_to_save, user=request.user).exists(): product_user_relation = ProductUsers(product=product_to_save, user=request.user) product_user_relation.save() data = { "saved": True, "product_name": product_to_save.name, "response": "ajouté à vos favoris", } else: ProductUsers.objects.filter(product=product_to_save, user=request.user).delete() data = { "saved": False, "product_name": product_to_save.name, "response": "retiré de vos favoris", } return JsonResponse(data)
class LegalNotice(View): template_name = "products/legal-notice.html" context = {"search_form": SearchForm(), "title": "Mentions légales"} def get(self, request): """Return the homepage template""" return render(request, self.template_name, self.context)
class UserCreate(View): template_name = 'products/user-create.html' context = { 'title': 'Création utilisateur', 'search_form': SearchForm() } def get(self, request): """Return the signup template""" form = UserCreateForm() self.context['form'] = form return render(request, self.template_name, self.context) def post(self, request): """Process the UserCreate form, redirect and log the user if it is valid, return the signup template otherwise""" form = UserCreateForm(request.POST) if form.is_valid(): form.save() username = form.cleaned_data.get('username') raw_password = form.cleaned_data.get('password1') user = authenticate(username=username, password=raw_password) login(request, user) return redirect('home') else : self.context['form'] = form self.context['errors'] = form.errors.items() return render(request, self.template_name, self.context)
class UserLogin(LoginView): template_name = 'products/user-login.html' authentication_form = LoginForm extra_context = { 'title': 'Connexion utilisateur', 'search_form': SearchForm() }
class HomeView(View): template_name = "products/homepage.html" context = {"search_form": SearchForm()} def get(self, request): """Return the homepage template""" return render(request, self.template_name, self.context)
class UserSaveProduct(View): context = { 'search_form': SearchForm() } def get(self, request, product_id): product_to_save = Product.objects.get(id=product_id) if not ProductUsers.objects.filter(product=product_to_save, user=request.user).exists(): product_user_relation = ProductUsers(product=product_to_save, user=request.user) product_user_relation.save() data = { 'saved': True, 'product_name': product_to_save.name, 'response': "ajouté à vos favoris" } else: ProductUsers.objects.filter(product=product_to_save, user=request.user).delete() data = { 'saved': False, 'product_name': product_to_save.name, 'response': "retiré de vos favoris" } return JsonResponse(data)
class UserLogin(LoginView): template_name = "products/user-login.html" authentication_form = LoginForm extra_context = { "title": "Connexion utilisateur", "search_form": SearchForm() }
class UserCreate(View): template_name = "products/user-create.html" context = {"title": "Création utilisateur", "search_form": SearchForm()} def get(self, request): """Return the signup template""" form = UserCreateForm() self.context["form"] = form return render(request, self.template_name, self.context) def post(self, request): """Process the UserCreate form, redirect and log the user if it is valid, return the signup template otherwise""" form = UserCreateForm(request.POST) if form.is_valid(): form.save() username = form.cleaned_data.get("username") raw_password = form.cleaned_data.get("password1") user = authenticate(username=username, password=raw_password) login(request, user) return redirect("home") else: self.context["form"] = form self.context["errors"] = form.errors.items() return render(request, self.template_name, self.context)
class HomeView(View): template_name = 'products/homepage.html' context = { 'search_form': SearchForm() } def get(self, request): return render(request, self.template_name, self.context)
def post(self, request, **kwargs): """Search product in database from HTML POST""" search_form = SearchForm( request.POST, auto_id=False ) if search_form.is_valid(): search = search_form.cleaned_data['product_search'] check_product = CheckProduct(search) if check_product.product is not None: return redirect(f'/products/product/{search}/') else: return redirect(f'/products/search/{search}/') else: return redirect('/')
def get_context_data(self, *args, **kwargs): search_form = SearchForm() products = Product.objects.all() category = ProduCategory.objects.all() return { 'products': products, 'search_form': search_form, 'categories': category }
class UserView(View): template_name = "products/user-details.html" context = {"search_form": SearchForm()} def get(self, request): """Return the user-details template""" self.context["title"] = "Salut " + request.user.first_name + " !" self.context["user"] = request.user return render(request, self.template_name, self.context)
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) search = kwargs['search'] context['search_form'] = SearchForm( initial={'product_search': search}, auto_id=False ) return context
class UserView(View): template_name = 'products/user-details.html' context = { 'search_form': SearchForm() } def get(self, request): self.context['title'] = 'Salut ' + request.user.first_name + ' !' self.context['user'] = request.user return render(request, self.template_name, self.context)
def sub_list(request): """Display the list of substitute for one selected product.""" if request.method == "POST": form = SearchForm(request.POST) if form.is_valid(): ( substitute, selected_product, ) = ProductManager.search_from_user_input(form.cleaned_data) return render( request, "products/sub_list.html", {"product": substitute, "searched": selected_product}, ) else: print("form is not valid !") raise Http404 else: form = SearchForm() return render(request, "products/sub_list.html", {"form": form})
def post(self, request): """Process the SearchForm form, return the result-search template if form is valid, render homepage template with errors context otherwise""" form = SearchForm(request.POST) if form.is_valid(): product_name = form.cleaned_data["product_name"] searched_product = Product.objects.filter( name__icontains=product_name).first() saved_product = [] if searched_product: substitutes_products = (Product.objects.filter( categories=searched_product.categories.first()).exclude( id=searched_product.id).order_by("nutri_score")[:12]) if request.user.is_authenticated: if ProductUsers.objects.filter(product=searched_product, user=request.user).exists(): saved_product.append(searched_product) for product in substitutes_products: if ProductUsers.objects.filter( product=product, user=request.user).exists(): saved_product.append(product) else: substitutes_products = None self.context["title"] = ('produit trouvé pour la recherche : "' + product_name + '"') self.context["searched_product"] = searched_product self.context["products"] = substitutes_products self.context["saved_product"] = saved_product return render(request, self.template_name, self.context) else: self.context["errors"] = form.errors.items() return render(request, "products/homepage.html", self.context)
class UserResults(View): template_name = "products/result-user.html" context = {"search_form": SearchForm()} def get(self, request): """Return the result-user template""" product_users_list = ProductUsers.objects.filter(user=request.user) product_list = [] for queryset in product_users_list: product_list.append(queryset.product) self.context["title"] = "Salut " + request.user.first_name + " !" self.context["products"] = product_list return render(request, self.template_name, self.context)
class UserResults(View): template_name = 'products/result-user.html' context = { 'search_form': SearchForm() } def get(self, request): product_users_list = ProductUsers.objects.filter(user=request.user) product_list = [] for queryset in product_users_list: product_list.append(queryset.product) self.context['title'] = 'Salut ' + request.user.first_name + ' !' self.context['products'] = product_list return render(request, self.template_name, self.context)
class ProductDetails(View): context = { 'search_form': SearchForm() } def get(self, request, product_id): searched_product = get_object_or_404(Product, id=product_id) product_nutriments = searched_product.nutriments.all() clean_nutriments = [] for nutriment in product_nutriments: clean_nutriments.append({ "name": settings.NUTRIMENTS[nutriment.name]['name'], "unit": nutriment.unit, "quantity": ProductNutriments.objects.filter(product=searched_product, nutriment=nutriment).first().quantity }) self.context['title'] = searched_product.name self.context['searched_product'] = searched_product self.context['product_nutriments'] = clean_nutriments return render(request, 'products/product-details.html', self.context)
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) product_code = kwargs['search'] context['search_form'] = SearchForm( initial={'product_search': product_code}, auto_id=False ) check_product = CheckProduct(product_code) if check_product.product is not None: context['product'] = check_product.product context['brand'], context['brands'] = check_product.get_brands() context['stores'] = check_product.get_stores() context['categories'] = check_product.get_categories() context['alternatives'] = check_product.get_alternatives() if self.request.user.is_authenticated: user_products = UserProducts(self.request.user) context['user_products'] = user_products.get_user_products() return context
def index(request): """Display the site index.""" return render(request, "main/index.html", {"form": SearchForm()})
def test_max_length(self): form = SearchForm() self.assertEquals(form.fields["product"].max_length, 100)
def test_random_data(self): user_input = "jambon" form = SearchForm(data={"product": user_input}) self.assertTrue(form.is_valid())