【发布时间】: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 添加了回溯,请看