我正在使用django在我的电子商务网站上设置购物车功能。所有项目都在MySQL表格中输入为cart_item
。
在提问之前,相关代码:
charm = False
if postdata.get('charm_sku'):
charm_sku = postdata.get('charm_sku','')
ch = get_object_or_404(Charm, sku=charm_sku)
#get products in cart
cart_products = get_cart_items(request)
product_in_cart = False
# check to see if item is already in cart
for cart_item in cart_products:
if cart_item.product.id == p.id:
if charm == True:
if cart_item.charm.id == ch.id:
# update the quantity if found
cart_item.augment_quantity(quantity)
product_in_cart = True
else:
if cart_item.charm.id == "":
# update the quantity if found
cart_item.augment_quantity(quantity)
product_in_cart = True
编辑:
我重新编写了如上所示的代码,导致两个if cart_item.charm.id
抛出attirbuteerror:'NoneType' object has no attribute 'id'
。在某种程度上,我认为这改善了情况,因为我怀疑第一个似乎“成功”的事实上是第一个if charm == True
失败,因此从未测试过第一个if cart_item.charm.id == ch.id
。问题仍然存在:当For循环明确声明cart_item时,为什么这会引发AttributeError,而cart_items显然同时将魅力列和id分配给所述列?
编辑2: 我可以不从嵌套的if引用cart_item吗?这是我能想到的唯一一件事,但同时我觉得我应该能够,所以也许这是错的?
答案 0 :(得分:1)
NoneType
意味着您实际上获得了None
而不是类的实例。这可能意味着分配失败或者函数调用返回了意外结果。在cart_item
的情况下,您对charm == False
的分配可能会失败。检查设置这两个变量的任何代码(赋值或函数调用)。
答案 1 :(得分:0)
不知何故,您的charm == False
条件也暗示cart_item.charm is None
。由于在访问None
属性之前未检查id
,因此会引发异常。
我对这些变量和对象类型知之甚少,无法理解为什么,但if
有条件地掩盖了你的问题。