Est-ce que j'ai bien fait ?
Bonsoir,
Je pense que j'ai bien fait car j'ai le même résultat que dans ta vidéo.
En fait les modèles Cart et Order ne sont pas les mêmes quand la vidéo "compléter la transaction". Car en cours de route on avait fait une modif "Modifier les modèles Order et Cart".
Du coup au lieu de faire :
j'ai modifié la fonction complete_order
def complete_order(data):
try:
user_email = data['customer_details']['email']
except KeyError:
return HttpResponse("Invalid user email", status=404)
user = get_object_or_404(Shopper, email=user_email)
user.cart.delete()
# 200 pour indiquer que le paiement a été procéssé correctement
return HttpResponse(status=200)
Car on avait surchargé la méthode delete du modèle Cart :
class Cart(models.Model):
# one to one car l'utilisateur ne peut avoir qu'un seul panier. Si j'utilise Foreign als unique=True
user = models.OneToOneField(AUTH_USER_MODEL, on_delete=models.CASCADE)
# plusieurs articles peuvent être ajoutés donc ManytoMany
orders = models.ManyToManyField(Order)
def __str__(self):
return self.user.username
def delete(self, *args, **kwargs):
for order in self.orders.all():
order.ordered = True
order.ordered_date = timezone.now()
order.save()
# je détache les articles de mon panier avec clear
self.orders.clear()
super().delete(*args, **kwargs)
Au final j'ai le même résultat que dans la vidéo.
Donc je pense que se servir de la méthode delete de Cart était la meilleure solution ?
Merci
Salut Gab!
Il semble en effet que la surcharge de la méthode delete du modèle Cart est une bonne solution dans ce cas précis, car cela permet de marquer tous les articles du panier comme étant commandés et d'effacer tous les articles du panier en une seule opération.
Cependant, attention, il est important de noter que cela peut avoir des conséquences imprévues dans d'autres parties de ton code où la méthode delete est utilisée, donc il convient d'être prudent dans l'utilisation de cette technique.
En tout cas, c'est cool d'avoir réussi à obtenir le même résultat que dans la vidéo bravo!
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte