我有一个名为checkout_items
的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(字母数字字符串,就像“名字”)似乎很好。两者都直接来自MySQL。有什么想法正在发生什么?
答案 0 :(得分:2)
<bound method CartItem.name of <CartItem: CartItem object>
是一个错误,通常在您调用方法时查看是否存在方法,而不是实际调用方法本身。我会尝试添加()
所以i.name()
答案 1 :(得分:2)
正如您所说,您为函数checkout_items()
提供的数据来自get_cart_items()。
因此,items
不是一个类似于命名空间的对象,而是一个包含您编写的方法的对象,所有这些对象都是CartItem
。
然后,当您构建co_item时,您将i.name
提供给字典,稍后将其打印为bound method CartItem.name of <CartItem: CartItem object>
。
看起来您的CartItem
对象有一个方法名称!你应该试试i.name()
。或者,如果name()
是其他内容,则使用任何真正具有该名称的属性。