我的“添加到购物车”按钮未在Django中保存用户首选大小未使用javascript

2024-05-10 01:46:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用数量和产品获取用户选择的尺寸,但我不知道如何做到这一点,也不知道如何实现这一点,我试图查看文档,但找不到任何方法

添加到购物车的my views.py

class Product_detail(View):
    def get(self, request, item_id,):
        item = Item.objects.filter(id=item_id)
        category_list = Categories.objects.all()
        items = Item.objects.all()
        print(item)
        return render (request, 'product_detail.html',{"items" : item, 'category_list': category_list, 'item': items })

    def post(self, request, item_id):
        item = request.POST.get('item')
        size = request.POST.get('Size')
        cart = request.session.get('cart')
        if cart:
            cart[item] = 1
        else:
            cart = {}
            cart[item] = 1
        request.session['cart'] = cart
        print(request.session['cart'])
        return redirect('products:detail', item_id=item_id)

我的html代码

<form method="POST" action="#{{ item.id }}">
                  {% csrf_token %}
                  <input type="text" value="{{item.id}}" hidden name="item">
                  <div class="prefer">
                  <label for="Size" style="font-size: 20px; font-weight:500;">Select Size:</label>
                  <select name="Size" id="size">
                    <option value="S">S</option>
                    <option value="M">M</option>
                    <option value="L">L</option>
                    <option value="XL">XL</option>
                    <option value="2XL">2XL</option>
                  </select>
                  </div>
                  <button class="btn btn-outline-primary add" type="submit" style="float: left;">Add To Cart</button>
                </form>

现在我只能获取它的商品id和数量 看起来像这样{'1':1}相反,我希望它不是{'Id':'Size':'Quantity'}如果用户选择任何大小,我想知道如何分配大小,基本上我想请求购物车中的大小和它的Id是一个数量

如有任何建议,将不胜感激

多谢各位

以前使用的代码

def post(self, request, item_id):
        item = request.POST.get('item')
        size = request.POST.get('Size')
        cart = request.session.get('cart')
        if cart:
            quantity = cart.get(item)
            if quantity:
                cart[item] = quantity+1
            else:
                cart[item] = 1
        else:
            cart = {}
            cart[item] = 1
        request.session['cart'] = cart
        print(request.session['cart'])
        return redirect('products:detail', item_id=item_id)

Tags: idsizeget数量valuerequestsessiondef
1条回答
网友
1楼 · 发布于 2024-05-10 01:46:36
  • 对于您在购物车中分配1的每个项目cart[item] = 1这里我们需要您从postcart[item] = size获得的大小
  • 如果您想单独存储每个项目,即使用户已经选择了相同的项目两次,那么您需要将购物车更改为列表
  • 为了保持数量{'1': 'M'} , {'1': 'L'}{'id' , 'size', 'quantity'}结构不起作用
# structure
{
  product_id: {
    product_size: product_quantity
  }
}

# example
{
  1: {
    'L': 1,
    'M': 2,
  }
}
def post(self, request, item_id):
  item = request.POST.get('item')
  size = request.POST.get('Size')
  cart = request.session.get('cart', None)
  if cart == None:
    cart = {}
  cart_item = cart.get(item, None)
  if cart_item == None:
    cart[item] = {
      size: 1,
    }
  elif cart_item.get(size, None) == None:
    cart[item][size] = 1
  else:
    cart[item][size] += 1
  request.session['cart'] = cart
  print(request.session['cart'])
  return redirect('products:detail', item_id=item_id)

相关问题 更多 >