MY add to cart button not save user preferred size with it in django no javascript is used

Solution for MY add to cart button not save user preferred size with it in django no javascript is used
is Given Below:

I want to fetch user selected size with the quantity and product but I don’t understand how to do that any how idea to achieve that i try to look documentation but didn’t find one any idea how to do that

my views.py for add to cart

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)

my html code

<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>

right now I am only able to fetch its item id and quantity
and look like this {‘1’: 1} instead i want it t be {‘Id’: ‘Size’ : ‘Quantity’} all i want to know how to assign a size if a user choose any size basically i want to request size in cart to with its id an an quantity

any suggestion will be appreciated

thank you

previously used code

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)

  • for every item you are assigning 1 in cart cart[item] = 1 here we needs size which you are getting from post cart[item] = size
  • if you want to store each item separately even though user has selected the same item twice then you need to change the cart to list
  • for maintaining quantity {'1': 'M'} , {'1': 'L'} or {'id' , 'size', 'quantity'} structure would not work
# 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)