Je suis novice en python et j'ai décidé de faire un essai avec TG2 en développant un petit magasin. Jusqu'ici je l'ai aimé, mais je devine que mon paradigme de codage est toujours très attaché à Like par exemple de java, la méthode add to cart
dans mon CartController.Gestion des éléments du panier en 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']
C'est certainement pas la meilleure façon d'y parvenir, mais jusqu'à présent, il fonctionne comme prévu. En Java je voudrais juste mettre à jour l'objet Item, mais ici je dois le retirer de la liste puis mis à jour, puis ajouté à nouveau, est-ce correct?
Si je ne suis pas la quantité d'article est pas mis à jour, comme le DBSession ne marque pas comme un objet sale, il n'a jamais enregistre sa nouvelle quantité Ma première tentative a été sans le retirer de la liste. – Juparave
oublier que, mauvais rafraîchissement, il est mis à jour, merci. Suppression de cette partie du code. – Juparave
Je fais des suppositions quant à la configuration de votre modèle; comme supposer que '1' était la quantité initiale, et que puisque vous récupérez le produit par pid, il a un membre pid (vous pouvez utiliser 'id' ou quelque chose, mais la même idée). Vous voudrez peut-être intégrer «récupérer l'article du panier» comme une méthode du panier lui-même, et lui faire retourner l'article avec la quantité de 0 si elle n'existe pas ... mais vous aurez une meilleure idée de cela depuis c'est votre code. – retracile