2009-10-09 1 views
1

저는 Python을 처음 접했습니다. 작은 상점을 개발하여 TG2를 사용해보기로했습니다. 지금까지 나는 그것을 사랑하고 있었지만 코딩 퍼레이드가 여전히 Java에 매우 흡사하다는 것을 짐작하고 있습니다. 예를 들어, CartController의 add to cart 메소드와 같습니다.장바구니 항목 관리 in Python Turbogears 2.0

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

이것은 확실히 최선의 방법은 아니지만 지금까지 예상대로 작동합니다. 자바에서는 Item 객체를 업데이트해야하지만 목록에서 제거하고 다시 업데이트해야합니다.

답변

3

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 
+0

dbsession 마크가되도록 더러운 개체로 결코하지 않습니다없는 것처럼 내가 항목의 수량이 업데이트되지 않습니다하지 않으면 새로운 수량을 저장합니다. 나의 첫번째 시도는 목록에서 그것을 제거하지 않고 있었다. – Juparave

+0

잊어 버린, 나쁜 새로 고침, 그것은 업데이 트 얻을, 감사합니다. 코드에서 해당 부분 제거. – Juparave

+0

모델을 설정하는 방법에 대해 추측하고 있습니다. '1'이 초기 수량이라고 가정하고 pid로 제품을 검색하면 pid 멤버가 있습니다 ('id'또는 다른 것이지만 동일한 아이디어를 사용하고있을 수 있습니다). '장바구니에서 제품 항목 검색'을 장바구니의 방법으로 통합하고 존재하지 않으면 수량 0의 항목을 반환하도록 할 수 있지만 그 이후로는 더 나은 느낌을 갖습니다. 그것은 당신의 코드베이스입니다. – retracile