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 postcart[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)