0

我正在使用 django 在我的电子商务网站上设置购物车功能。cart_item在 MySQL 表中,所有项目都以 s 形式输入。

在问题之前,相关代码:

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

编辑:我修改了上面显示的代码,导致 BOTHif cart_item.charm.id抛出 attirbuteerror: 'NoneType' object has no attribute 'id'。在某种程度上,我认为这改善了这种情况,因为我怀疑第一个看起来“成功”的实际上是第一个if charm == True失败的,因此从未测试过第一个if cart_item.charm.id == ch.id。问题仍然存在:当 For 循环清楚地声明 cart_item 并且 cart_items 显然有一个魅力列和 id 分配给所述列时,为什么这会引发 AttributeError?

编辑 2:我不能从嵌套的 if 中引用 cart_item 吗?这是我唯一能想到的,但同时我觉得我应该能够,所以也许这是错误的?

4

2 回答 2

1

NoneType意味着您实际上拥有的不是类的实例,而是None. 这可能意味着赋值失败或函数调用返回了意外结果。在. cart_item_ charm == False检查设置这两个变量的任何代码(赋值或函数调用)。

于 2013-04-08T23:07:01.187 回答
0

不知何故,你的charm == False情况也暗示着cart_item.charm is NoneNone由于您在访问属性之前不进行检查,id因此会引发异常。

我对这些变量和对象类型知之甚少,无法理解原因,但正是这种if条件掩盖了你的问题。

于 2013-04-08T23:08:40.817 回答