- 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
- science Projets mensuels
Formations
Articles
Communauté

La certification qualité a été délivrée pour la catégorie d'actions « Actions de formation ».
- 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
- science Projets mensuels
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 cet article, on va surcharger la méthode save du modèle product pour ajouter automatiquement un slug au produit.C'est quelque chose que je fais sur quasiment tous mes projets avec Django.
00:00:10 :On a très souvent besoin d'avoir des slugs pour les afficher dans les URL.Ce qui est un peu pénible si j'ajoute un nouveau produit, c'est qu'on doit créer nous-même le slug.
00:00:18 :Heureusement, on peut automatiser tout ça et d'une façon très simple.Pour ça, comme je vous le disais, on va surcharger la méthode save de notre modèle produit.
00:00:26 :Si je retourne ici, il doit être tout en haut produit.On va donc faire cette méthode save.On va mettre les args et les quarks, puisqu'on pourrait avoir des arguments qui sont passés à cette fonction.
00:00:37 :Et on va tout de suite faire le super.save en passant les args et les quarks.Comme ça, on aura le comportement par défaut de la fonction.
00:00:45 :Et nous, ce qu'on veut, c'est juste insérer des éléments ici.Ce qu'on va faire ici, c'est utiliser une fonction qui s'appelle slugify,qu'on peut importer, qui est à l'intérieur d'un module Django.
00:00:54 :Il est à l'intérieur de différents modules.Vous voyez, il est à l'intérieur de Default Filters et également à l'intérieur de Django.utils.Il me semble que c'est la même fonction dans les deux cas de figure.
00:01:03 :On peut l'importer de l'un ou l'autre des modules.Je vais l'importer ici.Cette fonction va nous permettre de transformer une chaîne de caractère en slug.
00:01:10 :Ce qu'on va lui faire, c'est passer self.name.Et on va passer ça à self.slug.Le problème, c'est qu'on ne veut pas créer un slug à chaque fois.
00:01:18 :Les slugs, c'est quelque chose qu'il vaut mieux ne pas trop toucher.Je m'explique.Si vous créez un produit,imagine qu'on crée un produit, on va dire t-shirt ici,on va mettre t-shirt comme ceci.
00:01:29 :Logiquement, le slug, ce serait t-shirt comme ceci tout en minusculesavec un tiret à la place de l'espace.Si par la suite, vous décidez de modifier le nom,on va mettre t-shirt docstring par exemple,si on garde ce qu'on a actuellement,si on garde notre self.slug égale à slugify.name,
00:01:45 :à chaque fois qu'on va sauvegarder le modèle,on va recréer le slug.Le problème, c'est que votre URL, si elle utilise le slug,peut-être qu'elle est répertoriée déjà dans plein d'autres sites.
00:01:54 :Et donc, si vous modifiez le slug, l'URL va également être modifiée.C'est pour ça qu'il vaut mieux ne pas toucher au slugune fois qu'il est créé,une fois que vous avez commencé à partager votre site.
00:02:03 :C'est quelque chose qu'il ne faut pas toucher.Ce qu'on va faire, c'est une vérification ici.On pourrait faire une structure conditionnelle.On pourrait dire if not self.slug,
00:02:11 :on fait self.slug égale à slugify.name.Pour éviter le niveau d'indentation,on peut utiliser une méthode un peu plus simple,que j'aime bien, c'est d'utiliser l'opérateur or.
00:02:20 :On va dire self.slug or slugify self.name.Qu'est-ce qu'il se passe ?S'il y a déjà un slug,donc si on a des informations à l'intérieur de slug,cette chaîne de caractères sera vraie,donc cette partie de l'opération sera vraie,puisque une chaîne de caractères qui contient au moins un caractère
00:02:35 :est considérée comme vraie.Et on va donc juste utiliser le slug existant.Si par contre, on n'a aucun slug qui est passé,ça, ce sera false.
00:02:42 :Et avec le or, on va utiliser la deuxième partie de l'opérationet on va transformer le nom en slug grâce à slugifyet le mettre dans l'attribut slug.
00:02:50 :Donc voilà, petite façon rapide de faire la même chose en une seule lignesans avoir besoin de passer par une structure conditionnelle.La dernière chose qu'on va devoir rajouter également,puisque je ne crois pas qu'on l'avait fait effectivement dans le slug ici,vous voyez que par défaut, il est obligatoire.
00:03:03 :Donc si je ne mets pas de slug, Django ne va pas être content.Donc si je retourne dans l'interface d'administration,que j'essaie de créer un produit ici,on va mettre des informations bidon, comme ça.
00:03:12 :Donc j'essaie de créer un produit.Alors là, c'est le stripeId dans ce cas-ci qui est obligatoire.Il faudrait rajouter un blank également là-dessus.Et là, j'avais mis un slug.
00:03:20 :Donc en fait, je vais l'enlever.Je vais rajouter un stripeId.Je réessaye.Et là, voilà, vous voyez, c'est ça l'erreur.Donc ce champ est obligatoire.
00:03:26 :Donc on va rajouter du blank sur le slug et sur le stripeId,tant qu'on y est.Donc on va faire blank égale à true.Et pareil ici, blank égale à true.
00:03:36 :Et on va faire l'émigration.Donc je vais revenir dans mon terminal.On va faire python manage.preq make migrations.python manage.preq migrate.Pour mettre ça dans la base de données.
00:03:48 :Voilà.Ici, je reviens sur mon interface.Donc cette fois-ci, je ne suis pas obligé de mettre un stripeId.Je vais laisser le slug vide.Et vous allez voir qu'automatiquement, il va être rempli par ma fonction.
00:03:58 :Donc ça fonctionne.On a bien t-shirt docstring comme ça en slug.Et vous allez voir que si cette fois-ci, j'enlève docstring,eh bien le slug ne sera pas régénéré,puisqu'il y en a déjà à l'intérieur de ce champ.
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.