⌘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 :Pour avoir un affichage un peu plus intéressant que ce qu'on a actuellement dans notre vue de profil,on va pouvoir modifier la méthode spéciale STR que l'on a dans notre modèle de l'adresse,donc Shipping Address ici, qui pour l'instant est inexistante,mais on va pouvoir la créer et c'est cette méthode qu'on a déjà créée sur d'autres modèles,
00:00:19 :par exemple dans les produits, si je vais dans Store Models ici,on a déjà fait cette méthode spéciale sur différents modèles comme le produit pour afficher le nom,puisque c'est cette méthode qui va être utilisée à chaque fois qu'on va vouloir afficher une instance d'un élément,notamment à l'intérieur de l'interface d'administration.
00:00:37 :Donc je vais revenir sur mon modèle Shipping Address,et je vais créer cette fameuse méthode avec les deux tirés du bas au début et à la fin,et alors là on va faire quelques manipulations, vous allez voir,on va rentrer un petit peu plus en profondeur dans du Python dans ce cas-ci,
00:00:50 :c'est pas vraiment du Django, là c'est juste des façons de faire un petit peu plus avancées que je vais vous montrer,pour facilement récupérer les informations dont on a besoin sur notre instance,et les afficher correctement dans notre interface, donc dans notre fichier HTML ici.
00:01:06 :Donc pour l'instant je vais juste mettre return self.name,pour vous montrer que si on retourne donc self.name ici et que j'actualise,on va avoir un affichage différent ici, et on a bien ici maintenant le nom de l'adresse en tant que tel.
00:01:18 :Donc pour modifier cet affichage, ce que je vais faire c'est une variable juste au-dessus ici,que je vais appeler address format, et donc vous voyez en fait que c'est une chaîne de caractère multiligne,puisque j'ai pas mal d'informations à afficher,et à l'intérieur de cette chaîne de caractère je vais mettre ce qu'on appelle des placeholders,
00:01:34 :donc des endroits où je vais vouloir insérer des valeurs par la suite.Donc pour l'instant on a plusieurs endroits où on va vouloir insérer des éléments,donc le name ici, qui va être donc le nom de l'adresse,et ensuite on a un formatage classique d'une adresse avec la première ligne d'adresse, la deuxième,
00:01:50 :la ville, une virgule, le code postal et le country ici, qu'on mettra en majuscule.Donc cette variable ici, je vais la prendre et je vais la formater à l'intérieur de cette méthode str.
00:02:02 :Donc comment on va pouvoir formater cette adresse ?Et bien dans ce cas-ci on va utiliser la méthode format,donc on n'utilise pas un fstring puisque un fstring ça va être interprété directement au moment où Python va tomber dessus.
00:02:14 :Dans ce cas-ci on veut juste un moule,donc on veut juste dire qu'à certains endroits dans cette chaîne de caractère on va insérer des choses,mais on ne veut pas à cet instant, donc à ce moment ici dans le script,modifier ce qu'il y a à l'intérieur puisqu'on ne sait pas encore ce qu'on va vouloir mettre dedans quand on crée cette variable.
00:02:29 :C'est uniquement quand on va créer une instance et quand on va appeler cette méthode ici pour afficher l'instancecomme on le fait dans notre fichier HTML ici, que l'on va vouloir modifier cette chaîne de caractère pour y insérer des informations.
00:02:42 :Donc ce que je vais faire c'est prendre cette variable addressFormat et faire un .format,donc la méthode format qui me permet de passer des informations.
00:02:55 :On pourrait dire name égale à self.name, ensuite on avait le adresse1,donc on pourrait dire adresse-1 égale self.adresse1 etc.Ça pourrait marcher, on fait juste dire ce que l'on veut mettre dans chacun des placeholders qu'on a à l'intérieur de notre chaîne de caractère,mais vous allez voir que c'est assez long, il faut mettre tout à la main comme ça.
00:03:14 :Donc on va pouvoir utiliser d'autres choses.Ce qu'on va faire en fait c'est utiliser le unpacking et on va utiliser un attribut qu'on a sur toutes les instances,donc en Python on a un attribut dict comme ceci.
00:03:26 :Et donc cet attribut dict ça va être un dictionnaire qui va contenir en clé les attributs de notre instanceet en valeur les valeurs tout simplement de ces attributs.
00:03:37 :Pour vous montrer tout ça je vais faire un print de self.dict ici,et pour l'instant je vais juste retourner ici une chaîne de caractère vide.
00:03:45 :C'est vraiment juste pour l'exemple, je vais ouvrir mon terminal et vous montrer ce que ça donne.Donc le petit print que j'ai fait ici en revenant sur mon interface, en actualisant.
00:03:53 :Donc là on n'a plus rien puisque je retourne une chaîne de caractère vide,mais si je reviens ici vous voyez qu'on a un dictionnaire qui va contenir différentes choses.
00:04:00 :Donc on a un state ici, ça c'est des choses que vous n'avez pas créé vous-même, c'est Django qui gère tout ça.On a l'identifiant, donc là encore l'identifiant c'est l'identifiant dans la base de données,et ce n'est pas un champ qu'on a ajouté nous-mêmes, il est ajouté automatiquement par Django.
00:04:13 :Mais par contre on va avoir ensuite toutes les informations de nos champs qu'on a définis ici.Donc on va par exemple avoir ici le nom de l'adresse avec la valeur travail etc.
00:04:22 :Donc ça on va pouvoir le passer à notre address format.Si on fait un point format on peut passer ce dictionnaire et l'unpacker grâce aux deux astérisques.
00:04:31 :Donc on va faire self.--dict comme ceci, et ça va avoir pour effet de passer tous ces éléments ici,comme si on les passait comme on avait fait tout à l'heure en faisant name égal et en mettant self.name.
00:04:43 :Et c'est exactement ce que ça va faire ici.Donc on va tester tout ça, on va juste mettre le dictionnaire pour l'instant.Ce n'est pas grave s'il y a des informations en plus ici, on va tout simplement les passer à notre méthode format,et si on passe des éléments en plus et bien ils ne seront tout simplement pas intégrés ici
00:04:58 :puisqu'on n'aura aucun endroit pour les récupérer.Puisque dans notre chaîne de caractère ici on n'a pas de id, on n'a pas de user id, on n'a pas de stateet toutes ces choses là qui sont en plus dans notre dictionnaire,mais ce n'est pas grave puisqu'on n'a rien ici pour les récupérer et ça ne produira pas d'erreur.
00:05:12 :Donc je reviens ici, j'actualise et ça commence à être pas mal.On a donc le nom, on a les lignes d'adresse et on a tout le reste ici.
00:05:20 :Un des problèmes qu'on a c'est que tout est sur la même ligne alors que dans notre chaîne de caractère,si je regarde ici, j'ai bien mis des retours à la ligne.
00:05:28 :Alors pourquoi on a ça ? Tout simplement parce que ces retours à la ligne ne sont pas interprétés.En fait ici ce qu'on a c'est le fameux caractère slash n, donc comme ceci, qu'on ne voit pas,mais qui est un retour à la ligne, sauf que slash n en html ça ne veut rien dire.
00:05:41 :Slash n en html ce n'est pas un retour à la ligne, un retour à la ligne ça va être soit des blocs de paragraphes,soit vous avez le fameux br qui est un break qui va permettre de revenir à la ligne.
00:05:51 :Alors heureusement on a un filtre avec Django qui nous permet d'interpréter ces slash n comme des retours à la ligne en htmlet ce filtre c'est tout simplement line breaks qui va transformer ces retours à la ligne slash n en retour à la ligne html.
00:06:05 :Donc si je mets ça et que je reviens, j'actualise et vous voyez que là on a bien tout qui est à la ligneexactement formaté comme ce que j'ai dans mon fichier python.
00:06:12 :Et si j'inspecte mon html en faisant un clic droit inspect, on va voir ici dans le p qu'on a bien des br,donc les fameux br qui sont les slash n mais interprétés cette fois-ci en html.
00:06:25 :Le problème qu'on a par contre c'est qu'on en a également un au début et à la fin,donc ça c'est normal là encore parce qu'en fait si je reviens dans mon modèle on a un retour à la ligne ici et un retour à la ligne à la fin.
00:06:36 :Donc pour enlever ces retours à la ligne il faudrait faire ceci, donc enlever ces retours à la ligne au début ou à la finmais après ce n'est pas forcément très clair maintenant le format que va avoir notre adresse.
00:06:45 :Moi ce que je préfère c'est garder ces retours à la ligne et juste les enlever en faisant un strip,donc à la fin de mon format je vais faire un point strip et on va enlever tout simplement le slash n,donc strip ça va enlever les éléments au début et à la fin d'une chaîne de caractère
00:06:59 :et donc on dit tout simplement ici qu'on veut enlever ce retour à la ligne et ce retour à la ligne.Donc si je reviens ici vous allez voir que là quand j'actualise on n'a plus le retour à la ligne au début et à la fin.
00:07:16 :Si vous vous souvenez bien pour les pays on avait un nom qui était dans la base de données,un nom courant de lettres et le nom complet qui est le nom d'affichage.
00:07:24 :Et pour récupérer ce nom d'affichage à partir du nom qu'on a dans la base de données,on va utiliser une méthode de Django qui est get-le nom de ce qu'on veut récupérer,donc dans ce cas ici country, et ensuite-display.
00:07:37 :Donc ça ce que ça va faire ici c'est tout simplement nous retourner le nom d'affichage.Donc là vous voyez on avait le choice ici avec le alpha2,donc le nom court pour la base de données et le name ici pour l'affichage.
00:07:48 :Et donc cette façon de faire va nous retourner l'affichage, donc au lieu de fr on aura France.Maintenant le problème c'est qu'on va devoir mettre à jour nos données,donc le dictionnaire ici pour ne pas avoir le nom court mais le nom long à la place.
00:08:00 :Donc ce que je vais faire c'est déjà récupérer ce dictionnaire dans une variable intermédiaireque je vais appeler data et je vais faire self.dict et on va faire une copie.
00:08:08 :Pourquoi on fait une copie ? Parce que si je change directement self.dict,on va modifier en fait les attributs de notre instance,et nous on veut pas modifier les attributs de notre instance,on veut juste les récupérer pour ensuite pouvoir les afficher.
00:08:19 :Comme un dictionnaire c'est un objet muable, si je ne fais pas un .copy ici,si je fais juste data égale self.dict comme ceci,et bien ces deux variables vont pointer vers le même dictionnaire,et si je modifie data je vais également modifier les attributs de mon instance.
00:08:33 :Donc en faisant un .copy je fais un autre dictionnaire,je crée un nouveau dictionnaire en mémoire à partir du dictionnaire des attributs de mon instance,et comme ça je ne vais pas toucher à mon instance.
00:08:43 :Et ensuite ce que je vais faire c'est tout simplement un data.update pour mettre à jour la clé country,et je vais dire qu'elle est égale cette fois-ci à getCountryDisplay,donc cette fameuse méthode qui me permet de récupérer le nom complet du champ country.
00:08:57 :Donc normalement on a tout qui est bon maintenant,vous voyez c'est pour ça que je vous disais que c'est un petit peu plus complexe que ce que j'avais au départ,on aurait très bien pu juste mettre comme j'avais auparavant name égale self.name,
00:09:08 :ensuite address1 égale address1.Là c'est vraiment juste pour vous montrer un truc qui est un peu plus versatile,puisque là en fait on pourra avoir 200 champs dans notre adresse,et on n'aurait rien besoin de changer ici,juste avec ces trois lignes de code on récupérait tous les attributs de notre instance,
00:09:23 :et on les passerait à cette adresse.Donc ça nous évite d'avoir à modifier à chaque fois dans la méthode format pour rajouter ou enlever des éléments.
00:09:31 :Donc on va vérifier que tout ça fonctionne, puisque là j'ai récupéré donc mon dictionnaire,je l'ai mis à jour, mais on n'a pas encore vérifié si tout ça fonctionnait dans notre interface,donc j'actualise, et là ça ne marche pas puisque,oui voilà ici j'ai donné directement le self ou un dict,
00:09:44 :donc en fait il faut bien remplacer ça par notre dictionnaire data.Donc normalement ça devrait être bon, je reviens, j'actualise,et là j'ai bien France qui est là maintenant.
00:09:52 :On pourrait également comme je vous disais le mettre en majuscule,donc en faisant un point upper tout simplement pour mettre en majuscule cette chaîne de caractère.
00:10:00 :Je reviens, j'actualise, et là j'ai bien le nom du pays qui est en majuscule.Donc ça fonctionne, on a une première façon de faire,qui vous voyez nous permet en fait d'avoir un affichage directement à partir de la méthode String,l'intérêt c'est que si je reviens comme je vous disais dans mon interface d'administration,