【问题标题】:how to access an element from a list of dictionaries如何访问字典列表中的元素
【发布时间】:2022-10-04 16:05:04
【问题描述】:

我正在尝试按照教程构建购物车视图,我需要打印出物品的数量。我在 utils.py 中有两个函数,我想从中访问数量元素并在视图中打印出来,目前出现错误unhashable type: 'list'

def cookieCart(request):
    try:
        cart = json.loads(request.COOKIES['cart'])
    except:
        cart = {}

    print('Cart:', cart)
    items = []
    order = {'get_cart_total': 0, 'get_cart_items': 0, 'shipping': False}
    cartItems = order['get_cart_items']

    for i in cart:
        try:
            cartItems += cart[i]["quantity"]
            product = Product.objects.get(id=i)
            total = (product.final_price * cart[i]["quantity"])
            order['get_cart_total'] += total
            order['get_cart_items'] += cart[i]["quantity"]

            item = {
                'product':{
                    'id':product.id,
                    'name':product.name,
                    'final_price':product.final_price,
                    'image_URL':product.image_URL,
                },

                **#print the quantity on view**

                'quantity':cart[i]["quantity"],
                'get_total':total,
                }
            items.append(item)

        except:
            pass

    return {"items": items, "order": order, "cartItems": cartItems}

def cartData(request):
    if request.user.is_authenticated:
        customer = request.user.customer
        order, created = Order.objects.get_or_create(customer=customer, complete=False)
        items = order.orderitem_set.all()
        cartItems = order.get_cart_items
    else:
        cookieData = cookieCart(request)
        cartItems = cookieData['cartItems']
        order = cookieData['order']
        items = cookieData['items']
    return {'cartItems':cartItems ,'order':order, 'items':items}

意见

from .utils import cookieCart, cartData

def my_view(request):
    data = cartData(request)    
    qty = data['item',['quantity']]    
    print(qty)

追溯:

Traceback (most recent call last):
  File "D:\ecom\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "D:\ecom\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "D:\ecom\shop\views.py", line 117, in cart
    qty = data['item',['quantity']]

Exception Type: TypeError at /shop/cart
Exception Value: unhashable type: 'list'

【问题讨论】:

  • 你能显示完整的traceback 错误吗?
  • unhashable type: 'list' 表示您的钥匙的哈希已成为列表.尝试散列列表时会发生此错误,该列表是不可散列的对象。是的,如果您可以在此处添加完整的堆栈跟踪,那么调试会更好。还要在函数结束前添加打印哈希,这样我们调试会更容易!!
  • @codester_09 添加了回溯,请看

标签: python django


【解决方案1】:

不确定您的数据是什么样的,但这可能是问题所在:

def my_view(request):
    data = cartData(request)    
    qty = data['items']['quantity']
    # qty = data['items',['quantity']]    
    print(qty)

【讨论】:

  • 这样做会在终端上给我一个 KeyError 'item',我添加了回溯,请看一下!谢谢
  • @betty_ 现在运行上面的代码。
  • @codester_09 这就是我得到的,TypeError:列表索引必须是整数或切片,而不是 str
【解决方案2】:

“my_view”中的项目是一个查询集:

items = order.orderitem_set.all()

它有 .quantity 属性吗?我不知道你的模型是如何构建的。

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2021-07-27
    • 2015-07-05
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多