- 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 personAjouter des propriétés à un modèle
Comme nous l'avons vu, un modèle Django n'est rien d'autre qu'une classe Python.
On peut donc très bien ajouter des méthodes et propriétés à un modèle en utilisant les principes de l'orienté objet.
On peut ainsi ajouter une propriété nous permettant d'obtenir une chaîne de caractères différente en fonction de l'état de publication d'un article :
class BlogPost(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField()
published = models.BooleanField(default=False)
date = models.DateField(blank=True, null=True)
content = models.TextField()
description = models.TextField()
@property
def publish_string(self):
if self.published:
return "'article est publié"
return "'article est inaccessible"
00:00:00 :Les modèles que l'on crée dans nos projets Django, vous voyez que ce ne sont vraiment que des classes Python.Donc là on a une classe et donc on peut manipuler ces classes pour rajouter par exemple des informations à l'intérieur de notre classe.
00:00:13 :On n'est donc pas obligé à chaque fois de passer par des champs.Imaginons par exemple que je souhaite afficher une chaîne de caractère un peu plus précise en fonction de la valeur du champ Published.
00:00:24 :Je ne suis pas obligé de rajouter un champ avec une chaîne de caractère pour afficher une phrase qui dit par exemplecet article est publié ou cet article n'est pas publié.
00:00:33 :Je peux le faire directement à l'intérieur de ma classe en créant une nouvelle méthode.Donc je vais l'appeler PublishString tout simplement et on va retourner en fonction de la valeur de Published une chaîne de caractère.
00:00:43 :Et là on va travailler au niveau de l'instance.Donc là vous voyez que j'ai mis Self dans cette méthode puisque c'est une méthode de ma classe.
00:00:50 :Et je vais donc utiliser Self qui va représenter mon instance.Donc je vais vérifier si Self.Published est vrai.Donc si c'est le cas on va retourner la chaîne de caractère l'article est publié.
00:01:03 :Et si ce n'est pas le cas et bien on va retourner tout simplement l'article est inaccessible.Donc là Self ça va vraiment représenter les instances de notre classe et les instances de notre classe.
00:01:14 :Si vous vous souvenez ce qu'on a vu jusque là et bien ça représente des enregistrements dans notre base de données.Donc quand on fait Self.Published si on travaille sur une instance qui représente l'article numéro 3 ici.
00:01:24 :Et bien ce sera égal à 1 donc à True dans notre code Python.Donc je vais vous montrer tout ça à l'intérieur de l'interpréteur Python interactif.
00:01:32 :On va récupérer le premier article du blog donc on va faire blogPost.objects.get.Et on va dire qu'on veut récupérer l'article dont le primary key est égal à 3.
00:01:41 :Donc là je n'ai pas récupéré ça dans une variable donc je vais faire b égale pour pouvoir travailler sur cet objet.Donc là j'ai bien l'instance b qui correspond à cette entrée ici.
00:01:52 :Et je vais afficher donc ma méthode donc cette méthode publishString à l'intérieur de mon interpréteur Python.Donc je fais b.publishString je mets les parenthèses.Et là dans ce cas-ci j'ai bien la chaîne de caractère l'article est publié qui m'a retourné.
00:02:05 :Si je récupère un autre objet donc un objet dont l'article n'est pas publié.Par exemple le 5 ici qui est une valeur de 0.Et bien je vais voir que la chaîne de caractère est différente.
00:02:15 :Donc si je fais publishString là j'ai bien l'article est inaccessible.Et si je reviens ici et que je change donc je vais mettre un atProperty pour ne pas avoir à l'intérieur de mon script Python à mettre les parenthèses.
00:02:28 :Donc pour créer une propriété et non pas une méthode.Donc là je pense que les changements ne vont pas être pris en compte.Donc si je fais ça là voilà j'ai juste le boundMethod mais je n'ai pas la valeur qui est retournée.
00:02:39 :Donc je vais sortir de cet interpréteur Python.Je vais le relancer pour bien recharger les changements que j'ai fait ici à l'intérieur de mon fichier.
00:02:48 :Donc je reviens ici dans mon interpréteur Python interactif.Je réimporte donc depuis blog.models la classe blogPost.On va récupérer le blogPost donc objectGet avec le pk qui est égal à 5.
00:03:02 :Et là si je fais publishString cette fois-ci sans les parenthèses.Je vais avoir ma propriété qui va me retourner dans ce cas-ci que l'article est inaccessible.
00:03:10 :Donc dans cette partie je voulais vraiment pointer du doigt le fait que tout ça c'est vraiment du Python.C'est des classes, c'est des objets.Donc dans ce cas-ci on crée une méthode donc une propriété à terme avec le décorateur atPropertyqui nous permet en fonction des champs ou même en fonction de n'importe quoi d'autre de retourner des valeurs.
00:03:28 :Donc c'est vraiment du Python pur c'est de l'orienter objet.Donc ne pensez pas qu'à chaque fois que vous voulez avoir des valeurs associées à vos modèles,vous êtes obligés de créer un nouveau champ.
00:03:37 :Les champs c'est vraiment quand vous voulez stocker de l'information dans votre base de données.Si vous voulez quelque chose qui va persister dans la durée là ça vaut le coup de faire un champ.
00:03:46 :Mais si c'est juste de l'information que vous voulez avoir pour l'affichage par exempledans un template HTML ou des informations comme ça qui vont être calculées à la voléeet qui n'ont pas besoin d'être stockées dans votre base de donnéeset bien vous n'avez pas besoin de créer de champs spécifiques.
00:04:00 :Donc voilà pour cette petite parenthèse.J'espère que vraiment ça vous permet de comprendre à quel point on peut utiliser ces objetsqui héritent de la classe modèle ici pour créer un lien avec notre base de donnéesmais que vraiment sur tout le reste ça reste du Python pur avec de l'orienter objet.
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.