0

Django を使用して、e コマース サイトでカート機能をセットアップしています。すべての項目は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ます。これら 2 つの変数を設定しているコード (代入または関数呼び出し) を確認します。

于 2013-04-08T23:07:01.187 に答える
0

どういうわけかあなたのcharm == False状態もそれを意味しcart_item.charm is Noneます. None属性にアクセスする前にチェックしないためid、例外がスローされます。

これらの変数とオブジェクトの種類について十分に理解していないため、理由を理解できませんがif、問題を隠しているのはその条件です。

于 2013-04-08T23:08:40.817 に答える