我试图根据Flask上的会话创建购物车。
想法很简单:
product_id
和qty
此POST查询在会话中添加新记录[" cart"]词典
[{'qty': '1', 'product_id': '6'},
{'qty': '1', 'product_id': '6'},
{'qty': '1', 'product_id': '6'}]
我抓住这些字段并将它们添加到会话字典中:
session["cart"].append(dict({'product_id': id, 'qty': qty}))
每次有人在购物车中添加产品时,都会在购物车会话中添加新记录{'product_id': id, 'qty': qty}
。
如何检查这个product_id
是否已经在字典中,如果是,只增加qty
,但不要在字典中创建具有相同product_id
的新记录?
我的添加到购物车:
@app.route('/add-to-cart', methods=['GET', 'POST'])
def add_to_cart():
if request.method == 'POST':
id = int(request.form['product_id'])
qty = int(request.form['qty'])
cart_session()
matching = [d for d in session['cart'] if d['product_id'] == id]
if matching:
matching[0]['qty'] += qty
session["cart"].append(dict({'product_id': id, 'qty': qty}))
return redirect(url_for('home'))
解决方案
@app.route('/add-to-cart', methods=['GET', 'POST'])
def add_to_cart():
if request.method == 'POST':
id = int(request.form['product_id'])
qty = int(request.form['qty'])
cart_session()
matching = [d for d in session['cart'] if d['product_id'] == id]
if matching:
matching[0]['qty'] += qty
else:
session["cart"].append(dict({'product_id': id, 'qty': qty}))
return redirect(url_for('home'))
答案 0 :(得分:3)
在python中查找列表中对象的一种简单方法是使用list comprehension:
matching = [d for d in session['cart'] if d['product_id'] == id]
if matching:
matching[0]['qty'] += int(qty)
else:
session['cart'].append(dict({'product_id': id, 'qty': int(qty)}))
答案 1 :(得分:3)
与rlbond
has already suggested
一样,请使用defaultdict
,如下所示:
cart = defaultdict(int)
for product_id, qty in d.iteritems():
cart[product_id] += qty
因此,在这种情况下,如果product_id
dict中尚未存在某个键cart
的条目,则会自动初始化为0
并递增。