def category_view(request, category): category = category categories = category_fn() if request.method == 'GET': #products = Product.objects.filter(category=category) sort_form = SortForm() order = extract_filter_value(request.GET) products = Product.objects.filter(category=category).order_by(order) paginator = Paginator(products, 6) page_number = request.GET.get('page') page_obj = paginator.get_page(page_number) context = { 'category': category, 'products': products, 'categories': categories, 'len': len(products), 'page_obj': page_obj, 'sort_form': sort_form, 'order': order, } return render(request, 'category.html', context)
def search_in_category(request, category): category = category categories = category_fn() query = request.GET['q'] sort_form = SortForm() order = extract_filter_value(request.GET) products = Product.objects.filter(category=category).filter( product_name__icontains=query).order_by(order) paginator = Paginator(products, 1) page_number = request.GET.get('page') page_obj = paginator.get_page(page_number) context = { 'category': category, 'products': products, 'categories': categories, 'len': len(products), 'page_obj': page_obj, 'query': query, 'sort_form': SortForm(), 'order': order, } return render(request, 'category.html', context)
def get_context_data(self, **kwargs): query = self.request.GET.get('q') context = super().get_context_data(**kwargs) categories = category_fn() context['query'] = query context['categories'] = categories return context
def index(request): products = Product.objects.all() categories = category_fn() context = { 'products': products, 'categories': categories, } return render(request, 'index.html', context)
def product(request, pk, slug=None): product = Product.objects.get(pk=pk) if request.method == 'GET': if slug is None: slug = product.product_name if slug and product.product_name.lower() != slug.lower(): return HttpResponseNotFound('Product not found') product.views += 1 product.save(update_fields=['views']) comment_form = CommentForm() product_comments = [c for c in Comment.objects.filter(product_id=pk)] owner = User.objects.get(pk=product.owner_id) context = { 'product': product, 'owner': owner, 'comment_form': comment_form, 'product_comments': product_comments, 'categories': category_fn(), 'views': product.views, } return render(request, 'single_product.html', context) else: comment_form = CommentForm(request.POST) if comment_form.is_valid(): comment = comment_form.save(commit=False) comment.product = product comment.user = request.user comment.save() product_comments = [ c for c in Comment.objects.filter(product_id=pk) ] owner = User.objects.get(pk=product.owner_id) context = { 'product': product, 'owner': owner, 'comment_form': CommentForm(), 'product_comments': product_comments, 'categories': category_fn(), } return render(request, 'single_product.html', context)
def checkout(request): if request.method == 'GET': form = OrderForm() form.fields['email'].initial = User.objects.get( pk=request.user.id).email categories = category_fn() context = { 'form': form, 'categories': categories, } return render(request, 'checkout.html', context)
def category_view(request, category): category = category categories = category_fn() products = Product.objects.filter(category=category) context = { 'category': category, 'products': products, 'categories': categories, 'len': len(products), } return render(request, 'category.html', context)
def search(request): query = request.GET['q'] products = Product.objects.all() categories = category_fn() matched = [] for product in products: if query.lower() in product.product_name.lower() or query.lower() in product.description.lower(): matched.append(product) context={ 'query': query, 'matched': matched, 'categories': categories, } return render(request, 'search.html', context)
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['categories'] = category_fn() context['products'] = self.products context['sort_form'] = SortForm() context['filter_form'] = ProductFilterForm() context['order'] = self.order page_number = self.request.GET.get('page') if self.products: paginator = Paginator(self.products, 8) context['paginator'] = paginator context['page_obj'] = paginator.get_page(page_number) context['is_paginated'] = True return context
def profile(request, slug): if request.method == 'GET': owner = User.objects.get(username=slug) try: profile_picture_exists = owner.profilepicture except ProfilePicture.DoesNotExist: profile_picture_exists = ProfilePicture(profile_picture='profile_pics/default_profile_picture.png', user=owner) products = owner.product_set.all() categories = category_fn() context = { 'products': products, 'owner': owner, 'categories': categories, 'profile_picture_exists': profile_picture_exists, } return render(request, 'profile.html', context)
def edit(request, pk): ImageFormSet = modelformset_factory(ProductPicture, form=ProductPictureForm, extra=4) product = Product.objects.get(pk=pk) categories = category_fn() id = request.user.id formset = ImageFormSet(queryset=ProductPicture.objects.none()) if request.method == 'GET': form = ProductForm(instance=product) formset = ImageFormSet(queryset=ProductPicture.objects.none()) context = { 'form': form, 'categories': categories, 'product': product, 'id': id, 'formset': formset, } return render(request, 'edit_product.html', context) else: form = ProductForm(request.POST, instance=product) formset = ImageFormSet(request.POST, request.FILES, queryset=ProductPicture.objects.none()) if form.is_valid() and formset.is_valid(): product = form.save(commit=False) # Setting foreign key product.save() for f in formset.cleaned_data: if f: image = f['image'] photo = ProductPicture(product=product, images=image) photo.save() return redirect('index') form = ProductForm(instance=product) context = { 'form': form, 'formset': formset, 'categories': categories, } return render(request, 'create_product.html', context)
def remove_from_cart(request, pk): categories = category_fn() if request.method == 'GET': cart_pk = int(request.GET['delete']) cart = Cart.objects.get(user_id=cart_pk) product = Product.objects.get(pk=pk) cart.products.remove(product) products = cart.products.all() total = sum(products.values_list('price', flat=True)) context = { 'products': products, 'cart_pk': cart_pk, 'categories': categories, 'total': total, } return render(request, 'cart.html', context)
def get_context_data(self, **kwargs): self.order = extract_filter_value(self.request.GET) context = super().get_context_data(**kwargs) context['categories'] = category_fn() products = Product.objects.order_by(self.order) images = ProductPicture.objects.all() context['products'] = products context['sort_form'] = SortForm() context['order'] = self.order self.page_number = self.request.GET.get('page') paginator = Paginator(products, 6) context['paginator'] = paginator context['page_obj'] = paginator.get_page(self.page_number) context['is_paginated'] = True return context
def edit(request, pk): ImageFormSet = inlineformset_factory(Product, ProductPicture, fields=('images', ), extra=4) product = Product.objects.get(pk=pk) categories = category_fn() id = request.user.id if request.method == 'GET': form = ProductForm(instance=product) formset = ImageFormSet(instance=product) print(formset.queryset) context = { 'form': form, 'categories': categories, 'product': product, 'id': id, 'formset': formset, } return render(request, 'edit_product.html', context) else: form = ProductForm(request.POST, instance=product) formset = ImageFormSet(request.POST, request.FILES, instance=product) if form.is_valid() and formset.is_valid(): product = form.save(commit=False) # Setting foreign key product.save() formset.save() return redirect('index') form = ProductForm(instance=product) context = { 'form': form, 'formset': ImageFormSet(instance=product), 'categories': categories, } return render(request, 'create_product.html', context)
def add_to_cart(request, pk): user = User.objects.get(pk=pk) my_cart = Cart.objects.get_or_create(user=user)[0] categories = category_fn() if request.method == 'POST': product_id = request.POST['add'] product = Product.objects.get(pk=product_id) my_cart.products.add(product) return redirect('index') else: products = my_cart.products.all() total = sum(products.values_list('price', flat=True)) context = { 'products': products, 'cart_pk': pk, 'total': total, 'len': len(products), 'categories': categories } return render(request, 'cart.html', context)