- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
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 personlive_helpToutes les questions
Thomas
4 décembre 2023 - 04 décembre 2023 à 18:55
checkConversation résolue
6 réponses
Bug de mon code, besoin d'un avis
Bonjour, voici le lien du repo github : https://github.com/TomQuez/DocShop Quand je supprime le panier coté utilisateur tout se passe bien. Mais quand je supprime le panier coté administrateur, la suppression …
Gabriel Trouvé
14 mars 2023 - 14 mars 2023 à 8:49
checkConversation résolue
2 réponses
Modifier la suppression du panier
Promis dernière question de la soirée ^^ loldef 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 …
Christian Aucane
17 janvier 2023 - 17 janvier 2023 à 12:32
checkConversation résolue
2 réponses
Supprimé = commandé ?
Du coup quand on supprime le panier on considère que l'article est commandé ?
00:00:00 :Dans cette vidéo, on va modifier la suppression du panier puisqu'actuellement on fait cettesuppression directement dans la vue et on a également la suppression des articles dupanier que l'on fait dans cette vue que l'on va devoir modifier puisque cette fois-ci avecle changement qu'on a effectué sur le modèle, on ne va pas vouloir supprimer ces articles,
00:00:17 :on va juste les détacher de notre panier et changer ces deux champs, donc on va direque l'article a été commandé et on va dire à quelle date il a été commandé commeça l'utilisateur pourra avoir un historique des articles qu'il a commandé et on va toutsimplement enlever ces articles du panier. Donc on va devoir effectuer déjà ces modifications
00:00:34 :et ce que je vais faire également c'est déplacer cette logique puisque actuellement elle est dansla vue, donc ça veut dire que pour effectuer la suppression du panier on est obligé de passerpar l'URL et le bouton qu'on avait rajouté sur notre site, donc on avait un bouton supprimer
00:00:47 :le panier qui nous permettait d'accéder à cette vue. Le problème de ça c'est que si par exempleon fait cette suppression au niveau de l'interface d'administration, donc si dans l'interfaced'administration, alors je crois qu'il va falloir que je me reconnecte, donc si dans cette interfaced'administration on avait un panier et qu'on supprimait ce panier, et bien cette logique
00:01:05 :que l'on a à l'intérieur de notre vue elle ne serait pas effectuée. Donc ce qu'on va fairec'est en fait passer par le modèle et on va surcharger la méthode delete, donc la méthodedelete du panier ici, on va créer notre propre méthode delete dans laquelle on va faire ces
00:01:20 :opérations. Donc l'intérêt de faire comme ça c'est que quand on va passer par l'interfaced'administration, quand on supprime un panier via l'interface d'administration ou n'importequelle méthode, quand on passe par exemple par un shell si on fait delete également sur un objetde panier, et bien on va passer par cette méthode delete que l'on va tout de suite modifier. Donc
00:01:37 :je vais la créer, delete, on n'oublie pas le self et on va également récupérer dans args et quarksles différents arguments positionnels ou arguments nommés qu'on pourrait passer à cette méthode. On
00:01:49 :va également à la fin utiliser super, donc là c'est de l'orienter objet, ce qu'on fait c'est qu'onsurcharge cette méthode, on ne va pas la remplacer, donc pour pouvoir avoir le comportement par défautde cette méthode on va devoir appeler la méthode parent, donc la méthode de notre modèle ici. Et
00:02:04 :nous ce qu'on va faire c'est juste entre les deux rajouter la logique qui va nous permettre de faireles modifications sur les articles. Donc on va repasser également ici les args et les quarks
00:02:13 :pour que tout se passe correctement si jamais on passait des arguments à cette méthode delete. Etdonc ensuite qu'est ce qu'on va faire ici ? Et bien on va tout simplement boucler sur les articles,
00:02:22 :donc on va dire for order in self.orders.all, donc on boucle sur tous les articles qui sontattachés au panier. On va ensuite modifier les champs qu'on avait rajoutés, donc le champ
00:02:32 :ordered on va le passer à true, et la date on va faire order.orderedDate, et là on va utiliserun module qui s'appelle timezone, donc on va devoir importer, qui va nous permettre de récupérer ladate et l'heure actuelles avec un objet qu'on appelle aware, donc c'est un objet qui aura des
00:02:47 :informations de fuseau horaire. Donc je vais faire option entrée, je valide import this name, et ilse trouve dans Django utils timezone. Donc ce fuseau horaire sera par défaut en UTC, donc UTC c'est le
00:02:58 :temps universel qui correspond si je me souviens bien au GMT, donc c'est le temps à Londres qui estune heure en moins que le temps à Paris, et donc cette date aura ces informations de fuseau horairemais par rapport à UTC, donc c'est à dire que si jamais par la suite on veut traduire cette
00:03:13 :information dans un fuseau horaire spécifique, il faudra le faire soit dans le template soit ailleurs,mais on ne va pas trop s'attarder là dessus pour l'instant, je veux juste vous montrer donc cetteméthode timezone.now qui nous permet d'avoir ces objets. On aura l'occasion d'y revenir quand on
00:03:25 :voudra afficher ces articles et prendre en compte ce fuseau horaire. Donc ce qu'on va faire pourfinir c'est bien sûr sauvegarder ce modèle, donc order.save, et pour finir en dehors de la boucle
00:03:35 :on va faire self.orders.clear. Donc ça, ça va me permettre de détacher ces éléments puisquevous voyez qu'on avait un many-to-many field, donc ça veut dire qu'on avait une relation entre lesarticles et notre panier, et en utilisant cette méthode clear on va casser cette relation et lesarticles ne seront plus liés à mon panier. Donc comme ça on va avoir des articles qui auront
00:03:55 :l'information de à quelle date et à quelle heure ils ont été commandés, on va également dire qu'ilsont été commandés et on va les supprimer de notre panier. Et donc toute cette logique ici elle va
00:04:04 :être effectuée également via l'interface d'administration. Et pour que les changementssoient répercutés également dans la vue, on va modifier cette ligne ici puisque on n'en a plusbesoin. Donc on va en fait tout simplement l'enlever puisque la logique se passe maintenant
00:04:16 :directement dans cette méthode delete, et en appelant cette méthode delete donc directementsur mon panier, ça va faire toute cette logique ici. Donc on n'a rien besoin de plus. Pour finir,
00:04:25 :la dernière chose qu'on va devoir faire c'est modifier la vue qui nous permet d'ajouter lesarticles au panier, puisque si vous vous souvenez bien dans add to cart ici, on avait cette ligneici qui nous permet de récupérer ou de créer un article. Et pour l'instant ce qu'on faisait
00:04:38 :c'est qu'on lui passait l'utilisateur et le produit. Et donc là comme on a ce champ orderedqui va être true ou false en fonction de si l'article a déjà été commandé ou non, on vadevoir rajouter cette information ici en disant qu'on souhaite cibler uniquement les articles quin'ont pas déjà été commandés. Donc comme ça si on a déjà commandé une paire de sneakers sur le
00:04:56 :site, eh bien on va quand même recréer un article et on ne va pas modifier l'article existant qui luia déjà été commandé. Donc on va pouvoir tester tout ça. Je vais revenir sur mon site, on va
00:05:07 :actualiser ici. Donc là je suis bien connecté, je clique sur voir l'article, je l'ajoute dans lepanier, j'ai bien un article dans le panier. Donc si je reviens ici, je vais avoir mon panier qui
00:05:17 :s'appelle Tibache avec les sneakers, j'en ai une. Donc si on va voir l'order, on a bien les sneakersici qui correspondent à cet article. Pour l'instant le field ici donc ordered est à false et on n'a
00:05:27 :aucune information de date. Si maintenant je supprime le panier, donc vous allez voir je peuxle faire directement depuis ici ou via l'interface et ça va faire la même chose. Donc ici je peux
00:05:36 :cliquer sur supprimer dans l'interface, je valide et si je reviens donc sur order, on a toujoursnotre produit qui est ici, donc l'article des sneakers et cette fois-ci on a bien ordered quiest coché et on a la date et l'heure. Et vous voyez au moment où j'enregistre, je suis à Montréal,
00:05:51 :il est 9h du matin et on a bien cette heure ici qui est 14h18, donc c'est l'heure universelleUTC. Et donc si jamais je repasse une commande cette fois-ci, là on voit que mon panier n'existe
00:06:02 :plus et j'en vais pouvoir, donc si je reviens sur la boutique, recréer un panier. Donc je vaisreprendre le même article, l'ajouter dans le panier et cette fois-ci ça va bien créer unnouvel item. Donc on avait notre premier article ici qui avait été commandé avec la date et l'heure
00:06:15 :et on en a créé un nouveau ici qui lui n'a pas encore été commandé et qui n'a donc pas cesinformations. Et si j'en rajoute un, donc si je rajoute dans le panier, on va voir qu'on a bien
00:06:25 :la quantité qui va avoir été modifiée ici, donc on est passé à 2 et on n'a pas touché au produitici qui est resté à 1. Donc voilà pour ces modifications, le fait de rajouter OrderedFalse
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.