Я пытаюсь создать корзину покупок на основе сеансов на Flask.Как добавить существующие ключи по значению в словаре python?
Идея проста:
- Клиент нажимает кнопку "Добавить в корзину" кнопки со скрытыми входами
product_id
иqty
Этот POST запрос добавляет новую запись в сессии [ "корзина"] словарь
[{'qty': '1', 'product_id': '6'}, {'qty': '1', 'product_id': '6'}, {'qty': '1', 'product_id': '6'}]
Я поймаю эти поля и добавлю их в сессию dict:
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'))
Solution
@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'))
Не было бы проще иметь словарь с 'product_id' в качестве ключей и' qty' в качестве значений? Тогда вы можете использовать 'defaultdict (int)' в качестве своего словаря. – rlbond