meta data for this page
ORM
ORM ⇒ Object Relational Mapping.
C'est une technique de programmation qui permet de manipuler les données de la base de données comme des objets.
- Tous les objets nécessitant des enregistrements (modèles) sont listés dans un fichier (models.py)
- Permet une couche d'abstraction pour exploiter la base de données. Plus besoin d'écrire des requêtes suivant le SGDBR que le projet utilise.
Créer un objet à partir d'un modèle
Utilisation du shell afin de faire quelques tests.
$ python manage.py shell
Création d'un article de blogue
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 19:29:22) [MSC v.1916 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> >>> from blogue.models import * >>> a = Article() >>> a.title = "un article" >>> a.content = "texte de mon article" >>> a.save()
On peut également écrire de cette façon :
>>> b = Article(title = "2eme article", content = "texte de l'article").save()
Avec une clé étrangère category
par exemple :
>>> cat = Category(title="Les chiens") >>> cat.save() >>> art = Article(title = "article sur les chiens", content = "texte de l'article") >>> art.category = cat >>> art.save()
Liaison plusieurs à plusieurs
>>> cat1 = Category(title="Les chiens") >>> cat1.save() >>> cat2 = Category(title="Les chats") >>> cat2.save() >>> art = Article(title = "article sur les chiens et les chats", content = "texte de l'article") >>> art.save() >>> art.categories.add(cat1, cat2) >>> art.save()
Objects, le manager des modèles
Récupération des enregistrements de la base de données (sous forme d'objet) via le manager que tout modèle possède et qui s'appelle objects
.
Afficher toutes les entrées d'un modèle
>>> Article.objects.all() <QuerySet [<Article: Article object (1)>, <Article: Article object (2)>, <Article: Article object (3)>]>
Récupérer un objet
>>> Article.objects.get(id=1) <Article: Article object (1)> >>> Article.objects.get(id=1).title 'Un super article'
Si la méthode __str__()
est défini dans le modèle, l'affichage correspond au return
de la méthode
>>> Category.objects.get(id=1) <Category: Animaux => Les animaux>
La méthode filter()
La méthode get ne retourne qu'un seul objet, filter
permet de récupérer plusieurs enregistrement.
>>> Article.objects.filter(is_draft=0) <QuerySet [<Article: Article object (2)>, <Article: Article object (3)>]>
On peut également enchaîner les filtres
>>> Article.objects.filter(is_draft=0).exclude(id=2) <QuerySet [<Article: Article object (3)>]>
delete()
>>> art = Article.objects.get(id=6) >>> art.delete() (1, {'blogue.Article': 1})
Exercice
Reprendre le projet blogue et modifier le fichier view.py
afin d'afficher la liste des articles sur la page /blogue
Faire également la page blogue/article/<id>