2013-06-22 64 views
0

我有一個名爲checkout_items Python字典的列表,通過簡單的函數創建(這裏進一步簡化,便於閱讀):Python字典參考返回一些奇怪

def checkout_items(request): 
    items = get_cart_items(request) 
    co_items = [] #a list of dictionaries to be used by the cart 
    #iterate through the items and homogenize them into a standardized checkout_item format 
    for i in items: 
      co_item = {'number': num, 
         'name': i.name, 
         'sku': i.sku, 
         'quantity': i.quantity, 
         'price': i.price} 

我在一個視圖中的其他地方引用此列表(再次,簡化):

checkout_items = cart.checkout_items(request) 

    attributes = {} 
    for i in checkout_items: 
     attributes['item_name_'+ str(i['number'])] = str(i['name']) 
     attributes['item_number_'+ str(i['number'])] = str(i['sku']) 
     attributes['quantity_'+ str(i['number'])] = str(i['quantity']) 

但名稱變量被設置爲這樣:<bound method CartItem.name of <CartItem: CartItem object>

然而,SKU(ALPH像「name」這樣的數字字符串)通過就好了。兩者都直接來自MySQL。任何想法發生了什麼?

+0

顯示models.py和更多代碼,請 – lalo

+0

您很可能有一個名爲'name'的模型方法,它可能會覆蓋mysql字段。你能顯示「CarItem」的型號代碼嗎? – karthikr

回答

2
<bound method CartItem.name of <CartItem: CartItem object> 

是當你打電話,看是否有方法是存在的,實際上不是調用方法本身通常給出錯誤。我會嘗試添加(),所以i.name()

+0

你和zmo都是對的,我愚蠢地沒有適當地調用這個方法。我有一個適度的通行證,爲什麼我這樣做,但是我的代碼本來不應該容許誤解。無論哪種方式,你首先回答,所以我接受了你的迴應。謝謝! – fildred13

2

正如您所說,您給函數checkout_items()的數據來自get_cart_items()。

所以items不是一個愚蠢的命名空間狀物體,但有你寫的方法的對象,和所有的人都CartItem秒。

然後,當您構建co_item時,您將i.name指定給字典,即稍後將其打印爲bound method CartItem.name of <CartItem: CartItem object>

它看起來像你的CartItem對象有一個方法名!你應該嘗試i.name()。或者,如果name()是別的東西,則使用任何真正具有該名稱的財產。