def basket_add(request, pk): if 'login' in request.META.get('HTTP_REFERER'): # print(request.META.get('HTTP_REFERER')) # print(pk) 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 = 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 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 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 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 += 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): # 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')) # отправляет пользователя обратно на ту же страницу