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

as you say, the data you give to the function checkout_items() is from get_cart_items().

So items is not a stupid namespace-like object, but an object that has methods that you wrote, and all of them are CartItems.

Then when you build co_item, you give i.name to the dictionary, that is later printed out as bound method CartItem.name of <CartItem: CartItem object>.

It looks like your CartItem object has a method name! You should try i.name(). Or use whatever property that really has the name if name() is something else.

于 2013-06-22T21:29:11.820 に答える