0

我有一个名为 的python 字典列表checkout_items,由一个简单的函数创建(为了便于阅读,此处进一步简化):

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'])

但是 name 变量被设置为:<bound method CartItem.name of <CartItem: CartItem object>

然而,sku(字母数字字符串,就像“名称”一样)似乎很好。两者都直接来自 MySQL。有什么想法吗?

4

2 回答 2

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

是通常在您调用以查看方法是否存在时给出的错误,而不是实际调用方法本身。我会尝试()添加i.name()

于 2013-06-22T21:27:25.263 回答
2

正如您所说,您提供给函数的数据checkout_items()来自 get_cart_items()。

所以items不是一个愚蠢的类似名称空间的对象,而是一个具有您编写的方法的对象,并且它们都是CartItems。

然后,当您构建 co_item 时,您将其提供i.name给字典,该字典稍后将打印为bound method CartItem.name of <CartItem: CartItem object>.

看起来您的CartItem对象有一个方法名称!你应该试试i.name()。或者使用任何真正具有名称的属性 ifname()是别的东西。

于 2013-06-22T21:29:11.820 回答