代码之家  ›  专栏  ›  技术社区  ›  Juparave

python turbogears 2.0中的购物车项目管理

  •  1
  • Juparave  · 技术社区  · 16 年前

    我对python-an不熟悉,我决定通过开发一个小商店来尝试使用tg2。到目前为止,我一直很喜欢它,但是我猜想我的编码展示仍然非常依赖Java,例如 add to cart 方法。

    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中,我只需要更新项目对象,但在这里我必须从列表中删除它然后更新,然后再添加,这是正确的吗?

    1 回复  |  直到 16 年前
        1
  •  3
  •   retracile    16 年前

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

    至于让这个更像蟒蛇,你可以考虑这样的事情:

    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