如何使用JQuery和Flask更新字典中的特定值?

时间:2017-07-03 10:25:23

标签: flask

我创建了一个包含我的产品的会话列表,我需要通过增加数量来更新任何产品的数量,因为我使用的是HTML type =“number”,我还创建了一个功能,它取了更改的数量并将其乘以当前数量,因此,假设第一个产品的数量默认为 2 ,通过增加数量,可以说2产品金额将变为4等等,价格也会成倍增加。

以下是代码:

<th style="text-align: center;" class="amount-izd">{{value["amount"]}}</th>

<th style="text-align: center; width: 14%;">
    <div class="block">

        <input type="number" id="myNumber" value="1" min=1 data-amount='{{value["amount"]}}' data-pros='{{value["id"]}}' data-price='
        {% if g.currency == "euro" %} 
            {{format_price(value["price"] * config.SITE_CURRENCIES["euro"]).rsplit(".",1)[0]}}
        {% elif g.currency == "dollar" %} 
            {{format_price(value["price"] * config.SITE_CURRENCIES["dollar"]).rsplit(".",1)[0]}}
        {% else %} 
            {{format_price(value["price"] * config.SITE_CURRENCIES["ruble"]).rsplit(".",1)[0]}}
        {% endif %}
        '>
        <label for="myNumber">qty</label>

    </div>
</th>

JQuery代码:

$("input[type='number']").bind('keyup change click', function (e) {
    if (! $(this).data("previousValue") || 
           $(this).data("previousValue") != $(this).val()
       )
   {

        var currentAmount = $(this).attr('data-amount');
        var currentPrice = $(this).attr('data-price');

        $(this).closest('tr').find('.amount-izd').text(parseInt(currentAmount) * $(this).val());

        $(this).closest('tr').find('.price-izd').text(parseInt(currentPrice) * $(this).val());

        $.ajax({
            type: 'post',
            url: '/standard-{{g.currency}}/profile/'+$(this).attr("data-pros")+'/update/price/' + parseInt(currentPrice) * $(this).val(),
            cache: false
        }).done(function(data){
            if(data.error){
                toastr.error(data.error)
            }
        });
        $(this).data("previousValue", $(this).val());
   } else {

   }

});

最后 views.py

@profile_route.route("/standard-<set_curr>/profile/cart/", methods=['GET','POST'])
@authorize
def cart_products():

    if "cart" not in session:
        return render_template("my-cart.html", display_cart = {}, total = 0)

    else:
        items = session["cart"]
        dict_of_products = {}
        total_price = 0
        for item in items:
            product = Goods.query.get(item)
            total_price += product.price
            if product.id in dict_of_products:
                pass
            else:
                dict_of_products[product.id] = {"qty":1, "name":product.product_name, 'category':product.Category.name, "sizes": product.sizes, "hex_color":product.hex_color,  "text_color":product.text_color, "material":product.material, "article":product.article, "price":product.price, "sort": product.sort, "amount": product.amount, 'slug':product.slug, 'public_id' : product.public_id, "id":product.id}

    return render_template("my-cart.html", display_cart=dict_of_products, total = total_price)

@profile_route.route("/standard-<set_curr>/profile/<int:id>/update/price/<price>", methods=['GET','POST'])
@login_required
def update_price(id, price):

    items = session["cart"]
    dict_of_products = {}

    for item in items:
        product = Goods.query.get(item)
        if product.id in dict_of_products:
            dict_of_products[id]['price'] = price
            return jsonify(success=dict_of_products[id]['price'])
    return jsonify(error='No product found.')

如果我更改了金额,在控制台中我得到一个500 error,上面写着:

return jsonify(success=dict_of_products[id]['price']) KeyError: 47

请问如何解决这个问题?

更新

我想知道,是否可以通过直接从JQuery访问它来更新字典的任何值?

0 个答案:

没有答案