⌘K
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- groups La communauté
- forum Questions
- live_tv Mentorats
Formations
Articles
Communauté

La certification qualité a été délivrée pour la catégorie d'actions « Actions de formation ».
⌘K
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- groups La communauté
- forum Questions
- live_tv Mentorats
Formations
Articles
Communauté

La certification qualité a été délivrée pour la catégorie d'actions « Actions de formation ».
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Dans cette vidéo, on va rajouter la possibilité de supprimer un seul article du panier,puisque pour l'instant on peut supprimer le panier au complet,donc ça va supprimer tous les articles qui sont dans le panier,mais moi ce que j'aimerais bien c'est pouvoir en fait tout simplement cocher une case
00:00:13 :qui va indiquer qu'on souhaite supprimer cet article.Et là encore vous allez voir à quel point c'est très facile à rajouteravec le formulaire qu'on a créé jusqu'à présent.
00:00:22 :Donc on va revenir dans notre fichier forms.py ici,et ce qu'on va faire c'est deux choses,on va déjà rajouter un input qui va être de type boolean,qui va nous permettre donc de cocher tout simplement une casepour dire qu'on souhaite supprimer l'élément,et ensuite on va surcharger la méthode save
00:00:36 :pour récupérer l'information de cet input HTML,et s'il est coché, supprimer l'article du panier.Donc on va déjà créer cet input, on va l'appeler delete tout simplement,et on va faire un boolean field,qu'on va mettre avec une valeur initiale de false,on va indiquer qu'il n'est pas requis,
00:00:54 :parce que par défaut les champs, si vous n'indiquez pas ce paramètre,ils vont être requis,dans l'autre cas on ne veut pas forcément supprimer l'article,donc on va dire qu'il n'est pas forcément obligatoire,et ce qu'on va mettre c'est également un label,et on va mettre un label en français,
00:01:07 :dans ce cas-ci on va mettre supprimer,donc ça c'est ce qui va être affiché dans l'interface du côté HTML.Donc juste avec ça, si je reviens sur ma page et que j'actualise,vous voyez qu'on a bien une nouvelle case qui s'affiche avec marqué supprimer,donc le fameux label qu'on vient d'ajouter,
00:01:21 :et on a une checkbox qu'on peut cocherpour indiquer qu'on souhaite supprimer l'élément du panier.Donc ce qu'on va faire ensuite, c'est comme je vous le disais,surcharger la méthode save,puisque pour l'instant cette case ici n'est reliée à rien,donc on va créer la méthode save qu'on va surcharger,
00:01:35 :donc on va ajouter les args et les quarks,au cas où on aurait des informations qui soient envoyées à cette méthode,et ce qu'on va faire c'est également tout de suite faire le return super save,pour pouvoir là encore effectuer tout ce que Django faitquand il sauve un modèle dans la base de données,
00:01:50 :donc là encore c'est de l'orienter objet,je ne vais pas m'attarder là-dessus,on fait juste surcharger la méthode pour pouvoir rajouter des comportementsquand on va sauvegarder l'article.
00:01:59 :Donc qu'est-ce qu'on va faire ici ?Et bien on va récupérer les données de notre formulaire,donc pour ça sur un formulaire en fait on va avoir un attribut qui s'appellecleaned data, qui sont les données de notre formulaireaprès qu'il ait été validé,qui vont nous permettre d'accéder dans ce cas-ci
00:02:13 :à la valeur de la clé delete,donc en fait cleaned data c'est un dictionnaire,et on va récupérer la valeur qui est dans le champ delete,donc dans l'input du côté html,donc c'est self.cleaned data,
00:02:24 :et on va dire que si cette case est cochée,et bien tout simplement on va supprimer l'instance,donc on va faire self.instance.delete.Et voilà, c'est tout ce qu'on a besoin de faire,donc comme je vous le disais là encore, très facile,on récupère les informations depuis les données du formulaire,
00:02:39 :et si donc le bouton delete est coché,donc ça ça va être true,donc on pourrait mettre is true ici mais c'est un peu redondant,donc si la case est cochée,et bien on va supprimer l'instance.
00:02:48 :Et c'est tout.Donc je vais vous montrer, on va vérifier que ça marche,j'actualise la page ici,je vais choisir de supprimer le premier élément ici,donc cette case est cochée,donc ici ça va être vrai, et on va supprimer l'instance.
00:03:00 :Donc je reviens, je vais cliquer sur la case icipour supprimer ce premier article,je clique sur mettre à jour les quantités,et là, ah tiens, vous voyez que ça n'a pas fonctionné,alors je vais retourner voir si j'ai bien supprimé,alors oui, en fait le problème ici c'est que,
00:03:14 :vous voyez en fait on supprime l'instance,mais tout de suite après en fait on applique le save,donc on va supprimer l'instance mais la sauvegarder tout de suite après,donc en fait on va la recréer si vous voulez,alors ce qu'il faut faire ici c'est tout simplement mettre un return
00:03:26 :pour retourner en fait la fonction,donc pour supprimer l'instance,retourner ce résultat,donc je ne sais même pas si delete retourne quelque chose,mais en tout cas on utilise returnpour arrêter la fonction save,pour ne pas supprimer et re-sauvegarder en fait l'instance,ce qui a pour effet de la recréer.
00:03:42 :Donc en fait si je reviens ici,j'actualise, on va voir si ça fonctionne,donc cette fois-ci je clique sur supprimer,mettre à jour et voilà,donc là on a bien effectivement l'article qui est supprimé,qui n'est pas re-sauvegardé par la suite.
00:03:53 :Et la dernière chose qu'on va devoir faire,c'est également là vous allez voir en fait si je mets à jour les quantités,on va se retrouver avec plus aucun élément dans notre panier,mais quand même encore un panier.
00:04:03 :Donc nous ce qu'on va faire c'est vouloir supprimer le panierdans le cas où on a plus d'éléments à l'intérieur de ce panier.Donc ça on peut le faire encore de plein de façons différentes,moi je vais le faire directement ici dans le save,donc ce que je vais faire c'est que je vais supprimer l'instance
00:04:16 :et on va aller récupérer le nombre d'éléments,donc le nombre d'articles qui sont à l'intérieur du panieret si le compte est égal à 0,et bien on va supprimer le panier également.
00:04:25 :Donc je vais dire if self.instance,donc self.instance ça va être l'article qu'on essaye de supprimer.On va dire ensuite .user,puisqu'on peut récupérer l'utilisateur à partir de notre article,et sur l'utilisateur on va voir le cartes,et sur le cartes on va voir les orders.
00:04:41 :Vous voyez ça fait une chaîne assez longue,on a l'article ici, l'utilisateur, le panier de l'utilisateuret tous les articles qui sont dans le panier de l'utilisateur.
00:04:49 :Et donc si ce compte est égal à 0,donc pour savoir combien d'éléments contient un query set,on peut utiliser count ici,donc si le compte du nombre d'articles dans le panier est égal à 0,et bien ici on va tout simplement faire un self.instance,
00:05:01 :.user, .cartes, .delete.Donc on va supprimer en fait le panier de l'utilisateur.Et ici je vais faire un return,.return true tout simplement,pour indiquer que l'élément a bien été supprimé.
00:05:13 :Donc on va retester tout ça,je vais revenir sur ma vue,donc pour l'instant j'ai un panier qui est vide,donc on va aller le supprimer dans l'interface d'administration,supprimer le panier,et on va recréer donc un panier,donc là le panier n'existe plus,je vais en recréer un avec un article,
00:05:30 :voir le panier, et je vais cliquer sur supprimer,mettre à jour les quantités,et alors là ça marche,en fait ça marche et ça marche pas,ça marche puisque vous voyez qu'il n'y a pas de panier qui a été trouvé,et en fait le problème c'est qu'on a une erreur 404,
00:05:42 :et ça c'est parce que si je reviens dans la vue du panier ici,en fait on essaie de récupérer le panier,et s'il n'existe pas on retourne un 404.
00:05:50 :Donc dans ce cas-ci en fait,notre formulaire a bien fonctionné,on a bien supprimé le panier,mais du coup,et bien ici en fait on a une erreur 404 qui est retournée.
00:05:58 :Donc là il va falloir modifier cette fonction,donc cette vue update quantities,pour rediriger différemment si le panier existe ou pas.Je remarque d'ailleurs,alors on n'aura peut-être pas besoin de faire ça,parce que je remarque en fait que là je passe des choses en trop,le orders on n'en a plus besoin,
00:06:13 :puisque en fait dans notre,donc pas dans le formulaire,dans le panier ici,on passe par les formulaires ici maintenant,pour afficher les instances qui sont dans le panier.
00:06:21 :Donc en fait dans ma vue ici,je peux enlever le orders,et en fait ici et bien je n'ai plus besoin du panier en tant que tel,puisque vous voyez là,Paris Charme le souligne,en fait il met la variable en gris,et ça veut dire que cette variable n'est pas utilisée en fait,
00:06:34 :à l'intérieur de la fonction.Donc en fait je ne suis même pas obligé de récupérer le panier,je peux juste l'enlever,puisque ici je récupère en fait directement les articles.
00:06:43 :On va quand même rediriger vers le panier dans cette vue ici,par contre je vais récupérer le query set dans une variable,donc on va dire orders tout simplement,donc orders égal à tous les articles de l'utilisateur,et ici on va faire une structure conditionnelle,et on va dire if orders.count est égal à 0,
00:07:00 :donc si on n'a aucun article qui est associé à l'utilisateur,et bien on va tout simplement rediriger,donc faire un return redirect,et on va rediriger vers la page d'accueil.
00:07:08 :Donc ça devrait marcher, je reviens là,donc on va essayer d'accéder à cette page du panier,et là logiquement on est redirigé vers l'accueil,je vais ajouter un article dans le panier,je vais aller voir le panier,je vais supprimer l'article pour mettre à jour les quantités,et là on est bien redirigé vers l'accueil,
00:07:24 :puisqu'il n'y a plus aucun article associé à l'utilisateur.Donc voilà pour tous ces petits changements qu'on a dû faire,il y a pas mal de petites choses auxquelles il faut penser,vous voyez à chaque fois c'est là où on parle peut-être d'algorithmie,moi je trouve que c'est un bien grand mot pour juste parler un peu de choses qui sont logiques,
00:07:38 :vous voyez que là on est tombé dans des cas de figure dans lesquels on a dû prendre des décisions,et il y a plein de façons de gérer tout ça,on aurait pu vous voyez faire cette logique différemment,on aurait pu rediriger différemment le update quantities ici,et vérifier à ces endroits s'il y avait un panier,
00:07:52 :donc par exemple ici j'aurais pu faire en fait une vérification,pour récupérer le panier de l'utilisateur en faisant comme ceci,donc ça c'est quelque chose qu'il est possible de faire aussi,de récupérer le panier de l'utilisateur,ou même directement en fait,alors on pourrait faire request.user.cartes,
00:08:07 :mais là en fait si vous faites ça,si l'utilisateur n'a pas de panier on aura une erreur,donc on aurait pu faire un try-except pour essayer de récupérer le panier de cette façon,bref je vais pas m'étendre là dessus,il y a plein de façons de faire,ça peut être un bon exercice pour vous d'essayer de le faire d'une autre façon,
00:08:20 :en allant récupérer les informations à d'autres endroits.Donc voilà comment tout simplement,finalement c'était une vidéo peut-être assez longue,mais pour quelque chose d'assez simple au final,puisque vous voyez qu'on a juste rajouté un champ dans notre formulaire,et grâce à ce champ et avec ces deux lignes de code,