2015-09-22 57 views
0

我在寫瓶的購物車。如何使用表單更改Flask會話字典中的值?

我的基於會話和形成字典這樣的車:

[{'qty': 1, 'product_title': 'Post num six', 'product_id': 6}, 
{'qty': 1, 'product_title': 'Post five', 'product_id': 5}, 
{'qty': 1, 'product_title': 'Fouth post', 'product_id': 4}] 

我需要在車改中/車路線數量價值爲每一個產品:

@app.route('/cart', methods=['GET', 'POST']) 
def shopping_cart(): 
    page_header = "Cart" 

    if request.method == 'POST' and 'update_cart' in request.form:     
     for cart_item in session["cart"]: 
      cart_item["qty"] += 1 # this is wrong 

      if cart_item["qty"] > 10: 
       flash(u'Maximum amount (10) products in cart is reached', 'info') 
       cart_item["qty"] = 10 

     flash(u'update_cart', 'warning') 

    return render_template('cart/cart.html', page_header=page_header) 

這裏是我cart.html模板:

... 
{% if session.cart %} 

<form action="" method="post"> 
    <div class="table-responsive"> 
     <table class="table table-hover"> 
      <thead> 
       <tr> 
        <th>Name</th> 
        <th width="100">Qty</th> 
       </tr> 
      </thead> 
      <tbody> 
      {% for cart_item in session.cart %} 
       <tr> 
        <td><a href="/post/{{ cart_item.product_id }}">{{ cart_item.product_title }}</a></td> 

        <td> 
         <div class="form-group"> 
          <input class="form-control" type="number" name="change_qty" min="1" max="10" value="{{ cart_item.qty }}"> 
         </div> 
        </td> 
       </tr> 
      {% endfor %} 
      </tbody> 
     </table> 
    </div> 

    <div class="clearfix"> 
     <button type="submit" name="update_cart" class="btn btn-info pull-right">Update Cart</button> 
    </div> 
</form> 

{% else %} 
    <h2 style="color: red;">There is no cart session =(</h2> 
{% endif %} 

在cart.html覆蓋週期的所有實例,並增加了change_qty輸入以改變在車中的每個產品的數量。

現在的問題是:如何改變購物車中每件商品的數量?

回答

2

會話對象不會自動檢測對可變結構的修改,因此您需要自行設置 session.modified = True