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 [2021/11/14 23:36] – 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: |