- 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 person00:00:00 :Dans cette partie, on va s'intéresser à ce qu'on appelle les relations inverses,c'est-à-dire qu'on va récupérer par exemple un article à partir d'une catégorie.Dans ce cas-ci, on a un modèle blog post qui contient un champ catégorieavec une relation plusieurs à plusieurs vers le modèle catégorie.
00:00:17 :On a vu qu'on pouvait accéder à toutes les catégories d'un article,par exemple en faisant blogpost.category.all.Donc ça, ça nous retournait toutes les catégories associées à une instance d'un article de blog.
00:00:28 :Et maintenant, ce qu'on va voir, c'est comment accéder aux articles à partir de la catégorie.Je vais lancer un shell, donc python-manage.py-shell.Je vais importer depuis blog.models les blog posts et les catégories.
00:00:40 :Et je vais très rapidement faire un petit tour de passe-passe avec une compréhension de liste,donc cette compréhension de liste ici,qui me permet d'associer toutes les catégories à tous les articles de mon blog.
00:00:51 :Ce que je fais pour vous l'expliquer assez rapidement,c'est que je boucle pour chaque article de blog dans blogpost.objects.all.Donc on boucle sur tous les articles.
00:00:59 :Et sur chaque article, on va utiliser la méthode set,et on va setter comme catégorie toutes les catégories.Donc on fait set, et on va chercher category.objects.all.
00:01:07 :Donc je fais ça, j'appuie sur Entrée pour valider.Et si je reviens dans TablePlus et que j'actualise,vous voyez qu'on a tous les articles de blog ici,avec à chaque fois les catégories 1, 2, 3 qui sont assignées sur chaque article.
00:01:18 :Donc l'article 3, 4, 5, 6 et 8 qui correspondent à tous les articles ici,le 3, le 4, 5, 6 et 8, et les catégories 1, 2, 3 associées.
00:01:26 :Je vais ensuite ajouter un petit peu d'aléatoire,donc je vais juste sélectionner quelques catégories ici que je vais enlever,juste pour qu'on ait pas toutes les catégories d'affichés.
00:01:34 :Donc je delete, je sauvegarde, et voilà.Donc j'ai comme ça assigné quelques catégories aléatoires à des articles.Et donc maintenant, ce qui va nous intéresser, c'est par exemple,de récupérer la catégorie 1, donc cette catégorie,et de voir quels articles sont associés à la catégorie 1.
00:01:49 :Donc par exemple, ici on aura l'article numéro 6,l'article numéro 5, le 4 et le 3.Je reviens dans mon terminal ici, dans PyCharm,et donc on va récupérer déjà la première catégorie,donc je vais faire une variable que je vais appeler cat1,qui va être égale à catégorie.objects.get avec un pk qui est égal à 1.
00:02:07 :Donc ça, ça va me récupérer la première catégorie,et ensuite pour afficher les articles qui sont associés à cette catégorie,on va pouvoir utiliser le nom de la classe,donc dans ce cas-ci, blogpost, tout en minuscules,donc on va faire .blogpost, et il faut rajouter un tiré du bas,
00:02:23 :et le mot set.Donc vous prenez le nom de la classe, vous mettez tout en minuscules,et vous rajoutez tiré du bas, set, pour faire le chemin inverse,donc pour partir de la catégorie,et retourner vers les articles qui sont associés à cette catégorie.
00:02:38 :Si j'appuie sur entrée actuellement, ça va nous retourner,là encore, un many related manager,donc pour récupérer tout ce qui est contenu dans ce manager,il faut utiliser all,donc ça, ça va nous retourner tout ce qui est dans le manager,mais on pourrait également utiliser toutes les autres méthodes,
00:02:52 :comme filter, first, last, etc.Donc je vais juste récupérer pour l'instant tous les articlesqui sont associés à cette catégorie avec all,j'appuie sur entrée pour valider,et là on voit qu'on a l'article 3, 4, 5 et 6,donc je vais aller revérifier dans ma table pour voir si c'est bien ça,
00:03:08 :et là on a donc associé au 1, le 3, le 4, le 5 et le 6.Donc c'est exactement ça, je vais vous montrer par exemple avec le 2,on devrait avoir donc le 8 et le 4,donc on va essayer avec le 2 à la placepour voir si ça fonctionne également,
00:03:22 :donc je crée une nouvelle variable 4, 2qui va être égale à la catégorie numéro 2,et on va afficher 4-2.blockpost tout en minuscule 7.all,
00:03:33 :et là on a bien le 4 et le 8.On peut faire la même chose avec les auteurs,donc là si je reviens dans ma table blog post,on voit qu'actuellement je n'ai aucun auteur d'associé à mes articles,donc je vais rapidement en mettre un ici,si je vais voir dans hot.user,
00:03:46 :ici on a le ID 2 pour l'utilisateur,donc on va mettre cet identifiant dans blog post,dans l'article par exemple 8,donc là je vais mettre 2,et dans le 4 également on va mettre 2.
00:03:58 :Je sauvegarde, donc là j'ai bien mon utilisateur numéro 2qui est associé à ces deux articles,et on va pouvoir de la même façon partir de l'utilisateurpour récupérer les articles de blog qui sont associés.
00:04:09 :Donc cette relation en chemin inverse,elle est possible que ce soit sur les champs de type many-to-many,donc plusieurs à plusieurs,mais également les champs foreign key,donc plusieurs à un.
00:04:18 :Donc on va récupérer notre utilisateur,on va importer depuis django.contrib.auth.modelsla classe user,on va récupérer notre premier utilisateurque je vais mettre dans une variable que j'appelle u tout simplement,et donc là comme on a un seul utilisateur,on peut faire user.objects.first,
00:04:35 :et ça va bien me retourner l'utilisateur tbashqui correspond à l'utilisateur avec la clé primaire de 2.Donc on va vouloir récupérer tous les articles de blogqui sont associés à cet utilisateur.
00:04:45 :Donc là c'est la même chose,on fait u.blogpost,donc le nom de la classe tout en minuscules,tiré du bas 7,et on utilise all pour récupérer tous les articles.
00:04:54 :Et là on a bien l'article 4 et l'article 8qui nous sont récupérés,qui correspondent bien à ces deux articlesqu'on avait associés à notre utilisateur.
00:05:02 :Donc les relations inverses, c'est très pratique.Au début c'est un peu perturbant,il faut vraiment prendre le nom de la classe ici tout en minuscules,rajouter tiré du bas 7,et après vous retombez sur un query setque vous pouvez filtrerou sur lequel vous pouvez récupérer tout,donc par exemple avec la méthode all comme on l'a vu,
00:05:17 :et après vous pouvez faire toutes sortes de manipulationsà partir de ce query set.Donc là encore Django est vraiment très puissant,il nous permet de parcourir les relations dans les deux sens,donc ça nous permet par exemplede partir de l'article à la catégorieou de la catégorie à l'article,
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.