- 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 cette partie, on va voir ce qu'on appelle les relations plusieurs-à-un.Alors pourquoi plusieurs-à-un ? Je vais vous le montrer avec un exemple très concret.
00:00:09 :Imaginons un auteur d'article de blog.Cet auteur d'article de blog, il va bien entendu pouvoir écrire plus qu'un seul article.On aura donc un auteur d'article de blog, mais plusieurs articles qui seront reliés à lui.
00:00:22 :On a donc une relation plusieurs-à-un, plusieurs articles étant reliés à un seul auteur.On ne peut pas, dans la façon dont on a construit notre application,avoir un article qui est relié à plusieurs auteurs.
00:00:34 :On pourrait, dans l'absolu ce n'est pas quelque chose d'impossible,par exemple un article scientifique pourrait être publié par plusieurs auteurs,mais dans le cas de notre application de blog, on souhaite que les articles ne soient associés qu'à un seul auteur.
00:00:47 :On a donc cette relation plusieurs-à-un qui est assez évidente ici,puisque plusieurs articles sont reliés à un seul auteur.Voilà pour la théorie, et maintenant dans la pratique, on va voir ce que ça donne dans le code.
00:00:58 :Dans le code, on va pouvoir ajouter cette relation plusieurs-à-un avec ce qu'on appelle un foreign key.Un foreign key, ça veut dire une clé étrangère,et c'est cette clé qui est en fait un champ dans notre base de données,qui va nous permettre de relier un modèle, dans ce cas-ci le blog post, à un autre.
00:01:17 :L'autre modèle auquel on va relier notre article de blog, c'est le modèle d'utilisateur,qui est user comme ceci avec une majuscule, c'est une classe.Je vais vous montrer là encore une petite astuce avec PyCharm,puisque là encore ce modèle est contenu dans un module qu'il est assez difficile de retenir.
00:01:34 :Dans PyCharm, on peut juste taper le nom de la classe,le nom de la classe est assez explicite, user,et ensuite sur la petite ampoule ici qui apparaît, vous pouvez cliquer,et choisir d'importer automatiquement cette classe depuis django.contrib.auth.model.
00:01:48 :Donc vous voyez que le nom du module est assez long, c'est assez difficile de s'en souvenir.Heureusement PyCharm lui est au courant de cette classe,il sait qu'une classe user existe à l'intérieur de ce module,donc on peut l'importer automatiquement en cliquant sur cette première entrée ici.
00:02:02 :Et si on va voir tout en haut de mon fichier, j'ai bien l'import qui est créé automatiquement à partir de ce module.Donc vous voyez on a django.contrib.auth.model, et à l'intérieur on a cette classe user.
00:02:11 :Donc une petite astuce avec PyCharm qui nous permet de facilement retrouver cette classe.Et on va donc créer ici, donc dans notre classe blog post, un foreign key.
00:02:21 :Donc le foreign key on va le mettre tout au début ici.Ça va être un champ qui va s'appeler author, donc author qui veut dire auteur,donc l'article de notre blog.
00:02:29 :Et on va utiliser depuis Models donc le champ foreign key.Donc ce champ il va être relié à notre classe utilisateur.Donc la classe utilisateur comme ceci, on la met en premier,et ensuite on va devoir renseigner un autre paramètre qui est très important,et qui est assez confus pour les débutants, c'est le paramètre undelete.
00:02:46 :Donc ce paramètre c'est un paramètre qui va spécifier le comportement que va avoir ce champ,si jamais le modèle référencé, dans ce cas-ci l'utilisateur, donc la classe user,venait à être supprimé.
00:02:58 :Donc imaginons que l'auteur qui est relié à cet article de blog on le supprime,et bien en fait ce undelete va spécifier ce que l'on doit faire avec ce champ.
00:03:07 :Donc on a plusieurs options, on peut faire une option qui s'appelle Models.cascade.Donc toutes ces options vont être en majuscule, et il ne faut pas mettre les parenthèses ici.
00:03:15 :C'est juste le nom ici, cascade, sans les parenthèses,et ça c'est disponible à l'intérieur de Models.Donc Models.cascade, qu'est-ce que ça va faire ?Ça va réaliser une suppression en cascade.
00:03:25 :Donc c'est-à-dire que si on supprime l'auteur de cet article, l'article également sera supprimé.Donc ça peut être quelque chose que l'on veut,si on veut supprimer tous les articles de l'auteur quand on le supprime,et bien on met cascade, mais ça peut être assez dangereux également.
00:03:38 :On peut vouloir un autre comportement, par exemple que lorsque l'on supprime l'auteur,et bien ce champ soit tout simplement passé à une valeur par défaut ou une valeur nulle.
00:03:47 :Donc on a plusieurs autres options ici.On a l'option Set Default, là encore il ne faut pas mettre les parenthèses.Si vous mettez cette option Set Default, ça veut dire qu'il va falloir passer une valeur par défaut.
00:03:57 :Donc là on pourrait dire par exemple que si on supprime l'auteur de l'article,et bien par défaut on mettrait cette valeur à 1.Donc 1 ce serait le primary key, donc l'identifiant qu'on souhaiterait assigner à cet article,donc dans ce champ si jamais l'auteur d'origine a été supprimé.
00:04:13 :On a également une autre option, c'est tout simplement Set Null.Donc Set Null qui va nous permettre de tout simplement mettre nulle à l'intérieur de notre base de données.
00:04:21 :Donc nulle c'est une valeur dans les bases de données qui ne représente rien.Et si on fait ça, vous êtes donc obligé de mettre nulle égale true ici,puisque pour pouvoir mettre la valeur de ce champ à nulle, il faut qu'on spécifie nulle égale true.
00:04:34 :Sinon ce n'est pas possible.Donc si vous mettez Set Null, il faut mettre nulle égale true.Si vous mettez Set Default, il faut mettre une valeur par défaut.
00:04:41 :Donc c'est assez logique.Donc c'est finalement quelque chose d'assez logique.On a également d'autres options disponibles, par exemple Protect,qui nous permettrait de protéger cet article si jamais l'auteur est supprimé.
00:04:52 :Alors qu'est-ce que ça veut dire ?Et bien tout simplement ça signifie que si jamais on veut supprimer l'auteur,on aura une erreur qui va nous dire que l'auteur ne peut pas être supprimé car il est relié à des articles.
00:05:03 :Donc c'est quelque chose qui peut être assez pratique si jamais vous voulez éviter les cas d'erreur.Donc ça, ça va vraiment varier en fonction de ce que vous voulez faire.
00:05:10 :Personnellement, il m'arrive le plus souvent de mettre soit Cascade, soit Set Null.Donc Cascade, si vraiment je veux supprimer par exemple des données qui sont reliées à l'utilisateur,on pourrait imaginer par exemple qu'on ait une classe d'un modèle qui représente des points d'expérience.
00:05:25 :Et si jamais on supprime l'utilisateur, on voudra également supprimer les points d'expérience qui lui sont associés.Dans le cas des points d'expérience, ça n'aurait pas beaucoup de sens d'avoir plein de points d'expérience qui ne sont reliés à personne.
00:05:36 :Par contre, dans le cas d'un article, c'est un peu dangereux de mettre Cascade.Même si l'auteur n'existe plus, si on le supprime, on aura potentiellement envie de conserver ces articleset éventuellement, après coup, de leur assigner un autre auteur ou un auteur par défaut.
00:05:49 :Donc ce paramètre Undelete, il n'y a pas de bonne réponse.C'est vraiment en fonction des cas de figure que vous allez savoir quelle valeur vous souhaitez lui assigner.
00:05:57 :Dans mon cas, je vais mettre 7 nulles.Et pour l'instant, je ne vais rien mettre, je ne vais pas mettre le nulle égal à True,juste pour vous montrer l'erreur qu'on a lorsqu'on va créer nos migrations.
00:06:06 :Donc je reviens dans mon terminal, je vais faire python manage.py makemigrations blog.Je valide avec Entrée.Et là, vous voyez que j'ai donc cette fameuse erreur qui me dit qu'on a spécifié sur le Undelete qu'on voulait mettre 7 nulles,mais que le champ ne peut pas être nul.
00:06:21 :Donc on est obligé de mettre ici null égal à True pour pouvoir créer notre migration.Donc je relance la commande.Et cette fois-ci, on a bien réussi à créer la migration.
00:06:31 :Si on va voir dans nos fichiers de migration ici, on a une nouvelle migration.Et qu'est-ce qu'on a à l'intérieur ?Et bien tout simplement un Add Field, puisqu'on ajoute un field avec le nom de Author.
00:06:41 :Et donc c'est un field qui est de type Foreign Key avec tous les paramètres que l'on avait spécifiés,qui sont également présents ici.On va pouvoir ensuite donc appliquer cette migration dans notre base de données.
00:06:51 :Donc pour ça, je vais faire python manage.py migrate.Et si on va voir dans notre base de données, vous allez voir qu'on aura une nouvelle colonne dans notre table blog post.
00:07:00 :Donc dans blog post ici, si j'actualise, vous voyez qu'on a maintenant une colonne qui s'appelle AuthorIdet qui contient par défaut une valeur qui est mise à nul.
00:07:09 :Donc ça, c'est normal.Et on a une petite flèche ici.Si on clique dessus, vous voyez que ça nous amène directement dans cette table AuthUser.
00:07:17 :Donc en fait, on voit bien qu'on a un lien entre la valeur qui va être définie ici dans AuthorId et la table AuthUser.Donc on verra ça plus en détail quand on va associer un auteur à un article de bloget on verra les valeurs que l'on va avoir à l'intérieur de ces colonnes.
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.