Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| public:appro-s7:td_web:orm [2023/10/18 14:19] – edauce | public:appro-s7:td_web:orm [2023/11/03 15:00] (Version actuelle) – edauce | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ===== 10. L'ORM Django et les QuerySets ===== | ||
| + | Dans ce chapitre, nous allons apprendre comment Django se connecte à la base de données et comment il y enregistre des choses. On respire un grand coup et on y va ! | ||
| + | |||
| + | Qu' | ||
| + | |||
| + | Un QuerySet est, par essence, une liste d' | ||
| + | |||
| + | Il est plus simple d' | ||
| + | |||
| + | ==== Le shell Django ==== | ||
| + | |||
| + | Ouvrez la console de votre ordinateur (et non celle de PythonAnywhere) et tapez la commande suivante : | ||
| + | command-line | ||
| + | ~/ | ||
| + | Ceci devrait maintenant s' | ||
| + | command-line | ||
| + | (InteractiveConsole) | ||
| + | >>> | ||
| + | Vous êtes maintenant dans la console interactive de Django. C'est comme celle de Python, mais avec toute la magie qu' | ||
| + | |||
| + | ==== Lister tous les objets ==== | ||
| + | |||
| + | Essayons tout d' | ||
| + | command-line | ||
| + | >>> | ||
| + | Traceback (most recent call last): | ||
| + | File "< | ||
| + | NameError: name ' | ||
| + | Oups ! Voilà que ça nous renvoie une erreur qui nous dit qu'il n' | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | Nous importons le modèle Billet depuis notre blog.models. Essayons à nouveau la commande précédente : | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | < | ||
| + | Cela nous permet d' | ||
| + | |||
| + | ==== Créer des objets ==== | ||
| + | |||
| + | Voici comment créer un nouveau objet Billet dans la base de données : | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | Cependant, il nous manque un petit quelque chose : moi. Nous avons besoin de lui passer une instance du modèle User en guise d' | ||
| + | |||
| + | Tout d' | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | Avons-nous des utilisateurs dans notre base de données ? Voyons voir : | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | < | ||
| + | Il s'agit du superutilisateur que nous avons créé tout à l' | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | Comme vous pouvez le constater, nous avons maintenant obtenu (get) un utilisateur (User) avec un nom d' | ||
| + | |||
| + | Nous allons enfin pouvoir créer notre Billet : | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | <Billet: Sample title> | ||
| + | | ||
| + | Et voilà ! Vous aimeriez voir si ça a vraiment marché ? | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | < | ||
| + | | ||
| + | Et voilà : un Billet de plus dans la liste ! | ||
| + | |||
| + | ==== Ajouter plus de billets ==== | ||
| + | |||
| + | Amusez-vous à ajouter d' | ||
| + | |||
| + | ==== Filtrer les objets ==== | ||
| + | |||
| + | L' | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | < | ||
| + | Et si nous voulions chercher les billets qui contiennent uniquement le mot " | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | < | ||
| + | Il y a deux tirets bas (_) entre title et contains. L'ORM de Django utilise cette règle afin de séparer les noms de champ (" | ||
| + | |||
| + | Vous pouvez aussi obtenir une liste de tous les billets publiés. Pour cela, nous allons filtrer les billets qui possèdent une date de publication (published_date) dans le passé : | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | >>> | ||
| + | < | ||
| + | Malheureusement, | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | Ensuite, publions-le grâce à notre méthode publish : | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | Maintenant, essayez d' | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | < | ||
| + | | ||
| + | ==== Classer les objets ==== | ||
| + | |||
| + | Les QuerySets permettent aussi de trier la liste des objets. Essayons de les trier par le champ created_date : | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | < | ||
| + | On peut aussi inverser l' | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | < | ||
| + | | ||
| + | Requêtes complexes grâce au chaînage des méthodes | ||
| + | |||
| + | Comme vous l'avez vu, quand on applique certaines méthodes à Billet.objects on obtient un QuerySet en résultat. Les mêmes méthodes peuvent également être appliquées sur un QuerySet, ce qui ensuite donnera lieu à un nouveau QuerySet. Ainsi, vous pouvez combiner leur effet en les enchaînant l'une après l' | ||
| + | |||
| + | >>> | ||
| + | < | ||
| + | C'est un outil très puissant qui va vous permettre d' | ||
| + | |||
| + | Génial ! Vous êtes maintenant prête à passer à l' | ||
| + | |||
| + | command-line | ||
| + | >>> | ||
| + | $ | ||
| + | |||
| + | |||
| + | [[public: | ||