Résolue

Modifier la suppression du panier

# Boucles # Bases de données # Django

Gabriel Trouvé

Mentor

Promis dernière question de la soirée ^^ lol


def add_to_cart(request, slug):
    user = request.user
    product = get_object_or_404(Product, slug=slug)
    # le panier : s'il n'existe pas il est créé, sinon on le récupère
    cart, _ = Cart.objects.get_or_create(user=user)
    # regarde si on a un objet order qui correspond à notre utilisateur et si le produit correspond à product
# ordered = false car on cible article pas déjà été commandé. On va recréer un article et pas modifier l'existant.
    order, created = Order.objects.get_or_create(user=user, ordered=False, product=product)
    # si le produit n'était pas dans le panier et qu'il est créé
if created:
        cart.orders.add(order)
        cart.save()
        # si déjà dans le panier
else:
        order.quantity += 1
        order.save()
    return redirect(reverse("product", kwargs={"slug": slug}))

J'ai du mal à comprendre le ordered=False dans order, created = Order.objects.get_or_create...

En gros si je ne le mets pas on risque d'utiliser un objet Order ayant un ordered=True ? Le ordered=False c'est juste pour créer un nouvel objet Order avec ordered=False ?


Merci ^^

Salut !


Effectivement, le paramètre "ordered=False" dans la ligne suivante de ton code :


order, created = Order.objects.get_or_create(user=user, ordered=False, product=product)


indique qu'on souhaite récupérer (ou créer) un objet "Order" pour l'utilisateur en cours avec les caractéristiques suivantes :

  • ordered = False : le produit n'a pas encore été commandé (car on est en train de l'ajouter au panier)
  • product = product : le produit correspond bien au produit en question

Si cet objet existe déjà dans la base de données, il sera récupéré. Si non, il sera créé avec les caractéristiques spécifiées (notamment ordered=False).


En résumé, le paramètre "ordered=False" est bien utilisé ici pour créer un nouvel objet "Order" avec l'indication que le produit n'a pas encore été commandé. Si on ne le spécifiait pas, on risquerait de récupérer un objet "Order" qui aurait déjà été commandé (ordered=True), ce qui ne serait pas cohérent avec l'ajout d'un produit au panier.


Bien cordialement.

Tom de l'équipe Docstring.

Gabriel Trouvé

Mentor

Super merci :)

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.