def form_valid(self, form): context = self.get_context_data() orderitems = context['orderitems'] with transaction.atomic(): Basket.get_items(self.request.user).delete() form.instance.user = self.request.user self.object = form.save() if orderitems.is_valid(): orderitems.instance = self.object orderitems.save() if self.object.get_total_cost() == 0: self.object.delete() return super(OrderItemsCreate, self).form_valid(form)
def basket_add(request, pk): if 'login' in request.META.get('HTTP_REFERER'): return HttpResponseRedirect(reverse('products:product', args=[pk])) product = get_object_or_404(Product, pk=pk) basket = Basket.objects.filter(user=request.user, product=product).first() if not basket: basket = Basket(user=request.user, product=product) basket.quantity += 1 basket.save() return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
def basket_add(request, pk): if 'login' in request.META.get('HTTP_REFERER'): return HttpResponseRedirect(reverse('products:product', args=[pk])) product = get_object_or_404(Product, pk=pk) basket_item = Basket.objects.filter(user=request.user, product=product).first() if not basket_item: basket_item = Basket(user=request.user, product=product) basket_item.quantity += 1 # добавить 'quantity' в скобки при ошибке update_fields # (если будет приходить пустое поле в сигнале product_quantity_update_save) basket_item.save() return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
def basket_add(request, pk): # Предварительне условия - пользоватль не авторизован на сайте, и закоментировать две последующие строки кода # Если зайти в продукты, выбрать категорию и выбрать какой-нибудь товар, то перенесет на страницу Аутентификации # if 'login' in request.META.get('HTTP_REFERER'): # return HttpResponseRedirect(reverse('products:product', args=[pk])) product = get_object_or_404(Product, pk=pk) basket = Basket.objects.filter(user=request.user, product=product).first() if not basket: basket = Basket(user=request.user, product=product) basket.quantity += 1 basket.save() return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
def basket_add(request, pk): if 'login' in request.META.get('HTTP_REFERER'): return HttpResponseRedirect(reverse('products:product', args=[pk])) product = get_object_or_404(Product, pk=pk) old_basket_item = Basket.get_product(user=request.user, product=product) if old_basket_item: old_basket_item[0].quantity = F('quantity') + 1 old_basket_item[0].save() update_queries = list(filter(lambda x: 'UPDATE' in x['sql'], connection.queries)) print(f'query basket_add: {update_queries}') else: new_basket_item = Basket(user=request.user, product=product) new_basket_item.quantity += 1 new_basket_item.save() return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
def add_product(request, pk): if LOGIN_URL in request.META.get('HTTP_REFERER'): return HttpResponseRedirect(reverse('mainapp:item', kwargs={'pk': pk})) product = get_object_or_404(Product, pk=pk) # basket = request.user.basket_set.filter(product_pk=pk) basket = Basket.objects.filter(user=request.user, product=product).first() if not basket: basket = Basket(user=request.user, product=product) basket.quantity += 1 basket.save() return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
def basket_add(request, pk): if 'login' in request.META.get('HTTP_REFERER'): return HttpResponseRedirect(reverse('catalog:book', args=[pk])) book = get_object_or_404(Book, pk=pk) old_basket_item = Basket.objects.filter(user=request.user, book=book) if old_basket_item: old_basket_item[0].quantity += 1 old_basket_item[0].save() else: new_basket_item = Basket(user=request.user, book=book) new_basket_item.quantity += 1 new_basket_item.save() return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
def add(request, pk): if 'login' in request.META.get('HTTP_REFERER'): return HttpResponseRedirect(reverse('products:product', args=[pk])) product = get_object_or_404(Product, pk=pk) basket_item = Basket.objects.filter(user=request.user, product=product).first() print(basket_item) if not basket_item: basket_item = Basket(user=request.user, product=product) basket_item.quantity += 1 basket_item.save() return HttpResponseRedirect(request.META.get( 'HTTP_REFERER')) # возвращается на тот же адрес, от куда пришёл
def basket_add(request, pk): if 'login' in request.META.get('HTTP_REFERER'): return HttpResponseRedirect(reverse('products:product', args=[pk])) product = get_object_or_404(Product, pk=pk) old_basket_item = Basket.objects.filter(user=request.user, product=product) if old_basket_item: old_basket_item[0].quantity += 1 old_basket_item[0].save() else: new_basket_item = Basket(user=request.user, product=product) new_basket_item.quantity += 1 new_basket_item.save() return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
def basket_add(request, pk): if "login" in request.META.get("HTTP_REFERER"): return HttpResponseRedirect(reverse("products:product", args=[pk])) product = get_object_or_404(Product, pk=pk) basket = Basket.objects.filter(user=request.user, product=product).first() if not basket: basket = Basket(user=request.user, product=product) basket.quantity += 1 else: basket.quantity = F("quantity") + 1 basket.save() update_queries = list(filter(lambda x: "UPDATE" in x["sql"], connection.queries)) print(f"query basket_add: {update_queries}")
def OrderCreate(request): cart = Basket(request) if request.method == 'POST': form = OrderCreateForm(request.POST) if form.is_valid(): order = form.save() for item in cart: OrderItem.objects.create(order=order, product=item['product'], price=item['price'], quantity=item['quantity']) cart.clear() return render(request, 'orders/order/created.html', {'order': order}) form = OrderCreateForm() return render(request, 'orders/order/create.html', {'cart': cart, 'form': form})
def get_context_data(self, **kwargs): data = super(OrderItemsCreate, self).get_context_data(**kwargs) # OrderFormSet = formset_factory(OrderItem, extra=1) OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=1) if self.request.POST: formset = OrderFormSet(self.request.POST) else: basket_items = Basket.get_items(self.request.user) # basket_items = Basket.objects.filter(user=self.request.user).order_by('product__category') if len(basket_items): OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=len(basket_items)) formset = OrderFormSet() # for form in formset: for num, form in enumerate(formset.forms): form.initial['product'] = basket_items[num].product form.initial['quantity'] = basket_items[num].quantity basket_items.delete() else: formset = OrderFormSet() data['orderitems'] = formset return data
def basket_edit(request, pk, quantity): items = [] baskets = [] for item in items: baskets.append(Basket( user=request.user, product=item.get('product') )) if request.is_ajax(): quantity = int(quantity) new_basket_item = Basket.objects.get(pk=pk) if quantity > 0: new_basket_item.quantity = quantity new_basket_item.save() else: new_basket_item.delete() basket_items = Basket.objects.filter(user=request.user).order_by('product__category').select_related() content = { 'basket_items': basket_items } result = render_to_string('basketapp/includes/inc_basket_list.html', content) return JsonResponse({'result': result})
def basket(request): title = 'корзина' basket_items = Basket.get_items(request.user).order_by('product__category') content = {'title': title, 'basket_items': basket_items} return render(request, 'basketapp/basket.html', content)
def get_context_data(self, **kwargs): data = super().get_context_data(**kwargs) OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=1) if self.request.POST: formset = OrderFormSet(self.request.POST) else: basket_items = Basket.get_items(self.request.user) if len(basket_items): OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=len(basket_items)) formset = OrderFormSet() for num, form in enumerate(formset.forms): form.initial['product'] = basket_items[num].product form.initial['quantity'] = basket_items[num].quantity form.initial['price'] = basket_items[num].product.price basket_items.delete() else: formset = OrderFormSet() data['orderitems'] = formset return data
def get_context_data(self, **kwargs): data = super(OrderItemsCreate, self).get_context_data(**kwargs) OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=1) if self.request.POST: # создание заказа на основе корзины formset = OrderFormSet(self.request.POST) else: basket_items = Basket.get_items(self.request.user) if len(basket_items): OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=len(basket_items)) formset = OrderFormSet() for num, form in enumerate(formset.forms): form.initial['product'] = basket_items[num].product form.initial['quantity'] = basket_items[num].quantity form.initial['price'] = basket_items[num].product.price basket_items.delete() else: formset = OrderFormSet( ) # Для самостоятельного наполнения заказ data['orderitems'] = formset return data
def get_context_data(self, **kwargs): data = super(OrderItemsCreate, self).get_context_data(**kwargs) orderformset = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=1) if self.request.POST: formset = orderformset(self.request.POST) else: basket_items = Basket.get_items(self.request.user) if len(basket_items): data['basket_items'] = basket_items orderformset = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=len(basket_items)) formset = orderformset() for num, form in enumerate(formset.forms): form.initial['product'] = basket_items[num].product form.initial['quantity'] = basket_items[num].quantity form.initial['price'] = basket_items[num].product.price # form.initial['price'] = f'{basket_items[num].product.price} * {basket_items[num].product.quantity} = ${basket_items[num].product.cost}' else: formset = orderformset() data['orderitems'] = formset return data
def get_context_data(self, **kwargs): data = super(OrderItemsCreate, self).get_context_data(**kwargs) OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=1) if self.request.POST: formset = OrderFormSet(self.request.POST) else: # Получаем объекты корзины пользователя basket_items = Basket.get_items(self.request.user) if len(basket_items): OrderFormSet = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=len(basket_items)) formset = OrderFormSet() for num, form in enumerate(formset.forms): form.initial['product'] = basket_items[num].product form.initial['quantity'] = basket_items[num].quantity form.initial['price'] = basket_items[ num].product.price_product basket_items.delete() else: # Если корзина пустая - создаем набор с одной чистой формой formset = OrderFormSet() data['orderitems'] = formset return data
def basket_add(request, pk): # reverse - преобразование записи namespace в обычный url, считаем что пользователь до авторизации пришёл # со страницы товара и редиректим его на страницу продукта # print(request.META.get('HTTP_REFERER')) if 'login' in request.META.get('HTTP_REFERER'): return HttpResponseRedirect(reverse('products:product', args=[pk])) # Проверяем существующий товар, а не удалённый # product_item = get_object_or_404(Product, pk=pk) product = get_object_or_404(Product, pk=pk) # basket_item = Basket.objects.filter(product=product_item, user=request.user).first() # Анонимный пользователь не может использоваться как ключ и в нем нет ID, для авторизации пользователя # используется специальный декоратор @login_required # вариант блока представлен в коде ниже ## basket = Basket.objects.filter(user=request.user, product=product).first() # # if not basket_item: # if not basket: # # basket_item = Basket(user=request.user, product=product_item) # basket = Basket(user=request.user, product=product) # # # basket_item.quantity += 1 # basket.quantity += 1 # # basket_item.save() # basket.save() # # HTTP_REFERER - адрес откуда пришёл пользователь # # print(request.META.get('HTTP_REFERER')) ## return HttpResponseRedirect(request.META.get('HTTP_REFERER')) old_basket_item = Basket.get_product(user=request.user, product=product).select_related() # old_basket_item = Basket.get_product(user=request.user, product=product).first() if old_basket_item: # old_basket_item[0].quantity += 1 old_basket_item[0].quantity = F('quantity') + 1 old_basket_item[0].save() update_queries = list( filter(lambda x: 'UPDATE' in x['sql'], connection.queries)) print(f'query basket_add: {update_queries}') else: new_basket_item = Basket(user=request.user, product=product) new_basket_item.quantity += 1 # для django 3-й или выше версии с "update_fields=['quantity', 'product']", в др. случ. пусто ".save()" # new_basket_item.save(update_fields=['quantity', 'product']) new_basket_item.save() return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
def main_basket(requset): title = 'Корзина' basket = Basket.get_basket(requset) context = { 'title': title, 'basket': basket, } return render(requset, 'basketapp/basket.html', context)
def basket(request): basket_list = [] if request.user.is_authenticated: # basket_list = Basket.objects.filter(user=request.user) basket_list = Basket.get_items(request.user).select_related() return { 'basket': basket_list, }
def basket_add(request, pk): # pk = product_pk if 'login' in request.META.get('HTTP_REFERER'): return HttpResponseRedirect(reverse('catalog:product', args=[pk])) product = get_object_or_404(Product, pk=pk) old_basket_item = Basket.get_product(user=request.user, product=product) if old_basket_item: # old_basket_item[0].quantity += 1 old_basket_item[0].quantity = F('quantity') + 1 old_basket_item[0].save() else: new_basket_item = Basket(user=request.user, product=product) new_basket_item.quantity += 1 new_basket_item.save() return HttpResponseRedirect(request.META.get('HTTP_REFERER')) # отправляет пользователя обратно на ту же страницу
def add_product(request, slug): product = get_object_or_404(Product, slug=slug) exists_item = Basket.objects.filter(user=request.user, product=product).first() if exists_item: exists_item.quantity += 1 exists_item.save() else: exists_item = Basket(product=product, user=request.user) exists_item.save() if request.is_ajax(): return ajax_response(request, exists_item.product.slug, exists_item.quantity) if 'login' in request.META.get('HTTP_REFERER'): return redirect('about', product=slug) return redirect(request.META.get('HTTP_REFERER'))
def basket(request): basket = [] if request.user.is_authenticated: basket = Basket.get_items(request.user) return { 'basket': basket, }
def ajax_response(request, name, quantity): return JsonResponse({ 'name': name, 'quantity': quantity, 'basket': Basket.get_total_count_and_price(user=request.user) })
def add_product_to_basket(request, pk): print('-----------pk_basket-----------:', pk) product = get_object_or_404(Product, pk=pk) print('-----------product_basket-----------:', product) #product = get_object_or_404(ProductCatalog, pk=pk) old_basket_item = Basket.objects.filter(user=request.user, title=product) if old_basket_item: old_basket_item[0].quantity += 1 old_basket_item[0].save() print('-----------old_basket_item[0].quantity-----------:', old_basket_item[0].quantity) else: new_basket_item = Basket(user=request.user, title=product) new_basket_item.quantity += 1 new_basket_item.save() print('-----------new_basket_item.quantity-----------:', new_basket_item.quantity) return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
def basket_add(request, pk): if 'login' in request.META.get('HTTP_REFERER'): return HttpResponseRedirect( reverse('products:product_details', args=[pk])) product = get_object_or_404(Product, pk=pk) basket_item = Basket.objects.filter(user=request.user, product=product).select_related() if basket_item: basket_item[0].quantity = F('quantity') + 1 basket_item[0].save() else: new_basket_item = Basket(user=request.user, product=product) new_basket_item.quantity += 1 new_basket_item.save() return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
def add(request, pk): if 'login' in request.META.get('HTTP_REFERER'): return HttpResponseRedirect(reverse('mainapp:product', args=[pk])) product = get_object_or_404(Product, pk=pk) basket_item = Basket.objects.filter(user=request.user, product=product).first() if not basket_item: basket_item = Basket(user=request.user, product=product) basket_item.quantity += 1 basket_item.save() else: # basket_item[0].quantity += 1 basket_item[0].quantity = F('quantity') + 1 basket_item[0].save() # возвращаем на ту страницу, откуда пользователь пришел (request.META.get('HTTP_REFERER')) return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
def basket(request): basket_items = [] if request.user.is_authenticated: basket_items = Basket.get_items(request.user) return { 'baskets': basket_items, 'total_sum': sum(basket.sum() for basket in basket_items), }
def add(request, pk): if 'login' in request.META.get('HTTP_REFERER'): return HttpResponseRedirect(reverse('mainapp:product', args=[pk])) product = get_object_or_404(Product, pk=pk) basket_item = Basket.objects.filter(user=request.user, product=product).first() print(basket_item) if not basket_item: basket_item = Basket(user=request.user, product=product) basket_item.quantity += 1 else: # basket_item.quantity += 1 basket_item.quantity = F('quantity') + 1 basket_item.save() update_queries = list( filter(lambda x: 'UPDATE' in x['sql'], connection.queries)) print(f'запрос корзины: {update_queries}') return HttpResponseRedirect(request.META.get('HTTP_REFERER'))