2013-04-08 48 views
0

我正在使用django在我的电子商务网站上设置购物车功能。所有项目都以cart_item s的形式输入MySQL表格中。为什么同一个对象抛出一个“NoneType”对象属性错误在一个实例中而不是其他的?

的问题之前,相关代码:

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,并且cart_items明确地将魅力列和id分配给所述列时,为什么这会拖拽AttributeError?

编辑2: 我不能从嵌套如果参考cart_item?这是我能想到的唯一事情,但同时我觉得我应该能够,所以也许这是错误的?

+0

而不是'如果x ==真:ELIF X ==假:'最好是使用成语'如果x:其他:'。如果你必须确定它们是否完全等于'True'或'False',则应该使用'如果x为真:elif x为False:'这是因为(例如)0 == False'为真,但“0是假”是错误的。 – SethMMorton 2013-04-08 23:55:13

+0

不,我没有理由,只是原型代码中的一个愚蠢的语义错误。将修复生产。 – fildred13 2013-04-09 00:00:30

回答

1

NoneType意味着,而不是类的实例,你实际上得到None。这可能意味着赋值失败或函数调用返回意外的结果。您在的情况下可能会失败cart_item。检查设置这两个变量的任何代码(赋值或函数调用)。

+0

我应该提到错误是在第56行,这是'if cart_item.charm.id ==“”:'行。为什么这行会在'如果cart_item.charm.id == ch.id:'不?我已经从提供的代码片断之前和之后删除代码,但从中间没有任何代码。我会将声明添加到代码片段的前面。 – fildred13 2013-04-08 23:16:26

+0

@ fildred13在'charm == True'时,'cart_item.id'被赋值给一个对象,而不是'False'时。 – 2013-04-08 23:19:06

+0

我已经扩展了代码,基本上包含了整个'def add_to_cart'。我明白cart_item.id在'charm == True'时被分配了一个对象,但我不明白为什么它不是false的时候。这个任务发生在那里,就在“魅力”的条件测试之前,那么在第一个有条件的任务中是否会突破这个任务? – fildred13 2013-04-09 00:09:59

0

不知你charm == False条件也意味着cart_item.charm is None。由于您在访问id属性之前没有检查None,因此会引发异常。

我不知道有足够的了解这些变量和对象类型明白为什么,但它是if有条件的多数民众赞成掩盖了你的问题。

相关问题