1

我是 python 新手,我决定通过开发一家小商店来尝试使用 TG2。到目前为止,我一直很喜欢它,但我猜我的编码游行仍然非常依赖于 java 的 Like,例如add to cart我的 CartController 中的方法。

def add(self, **kw):
    pid=kw['pid']

    product = model.Product.by_id(pid)

    cart = self.get_cart()

    # check if that product is already on the cart
    isInCart = False
    for item in cart.items:
        if item.product == product:
            # if it is, increment quantity
            cart.items.remove(item)
            isInCart = True
            item.quantity += 1
            cart.items.append(item)
            break

    if not isInCart:
        item = model.CartItem(cart, product, 1, product.normalPrice)
        cart.items.append(item)

    DBSession.add(item)
    DBSession.flush()

    # updating values for fast retrieval showing
    # how many items are in the cart
    self.update_session(cart)

    return u'Item added to cart, %d items in session' % session['cartitems']

这当然不是实现这一目标的最佳方法,但到目前为止它按预期工作。在java中我只需要更新Item对象,但在这里我必须从列表中删除它然后更新,然后再次添加,这是正确的吗?

4

1 回答 1

3

由于您正在修改item对象,因此我看不出您必须删除然后将该项目附加到列表中的任何原因。为什么你认为你必须这样做?

至于让这更 Pythonic,你可能会考虑这样的事情:

items_by_pid = dict([(item.product.pid, item) for item in cart.items])
item = items_by_pid.get(pid, None)
if item is None:
    item = model.CartItem(cart, product, 0, product.normalPrice)
    cart.items.append(item)
item.quantity += 1
于 2009-10-10T17:28:31.850 回答