L'ORM de django pour faire des requêtes sans SQL
Dans la partie précédente, on a vu comment créer les tables d’une base de données avec les modèles en django et à utiliser les migrations pour les appliquer.
Dans cet article, nous allons voir comment récupérer des objets en base de données et les afficher sur vos pages HTML en les passant par les vues.
Étape 1 : Modifier le fichier views.py
Pour commencer, rendez-vous dans le fichier views.py
. Supprimons les messages codés en dur que nous avons ajoutés dans le contexte, et recréons une variable contexte
qui sera un objet vide : {}
.
Nous allons maintenant remplir cet objet contexte
avec les messages que nous avons en base de données. Pour cela, nous devons d’abord importer notre modèle Message
. Ajoutez cette ligne en haut de votre fichier views.py
:
from feed.models import Message
Étape 2 : Utiliser l’ORM de Django pour récupérer les objets
Django possède un ORM (Object Relational Mapper) qui nous permet d’interagir avec les tables de la base de données sans écrire de SQL. Pour récupérer tous les messages, utilisez la commande suivante :
contexte['messages'] = Message.objects.all()
Cette commande signifie que nous voulons récupérer tous les objets de la table Message
et les stocker dans la variable contexte
. Ensuite, nous passons cette variable au template pour afficher les messages dans notre page HTML. Si tout fonctionne correctement, en rafraîchissant la page d’index, vous devriez voir apparaître le message “Hello World”.
Étape 3 : Corriger le champ username
Nous avons un petit problème : le champ username
n’existe plus directement. Pour le corriger, ouvrez votre fichier index.html
dans le dossier templates
, et remplacez message.username
par message.user.username
.
Le champ username
se trouve maintenant à l’intérieur de l’objet user
. Une fois cette modification effectuée, rafraîchissez la page et le nom d’utilisateur devrait s’afficher correctement.
Étape 4 : Simplifier l’affichage du nom d’utilisateur
Django peut représenter un utilisateur de manière lisible par les humains, en utilisant par défaut le champ username
. Cela signifie que nous aurions aussi pu simplement écrire message.user
à la place de message.user.username
, mais pour être plus explicite, nous conservons message.user.username
. Cela rend notre intention plus claire : afficher précisément le nom d’utilisateur.
Étape 5 : Afficher d’autres informations utilisateur
Vous pouvez aussi afficher d’autres informations utilisateur, comme le prénom. Par exemple, en allant dans /admin
, modifiez l’utilisateur et ajoutez-lui un prénom (comme “Thomas”). Ensuite, dans votre fichier HTML, remplacez message.user.username
par message.user.first_name
. Lorsque vous rafraîchissez la page, le prénom “Thomas” devrait s’afficher.
Cependant, si vous souhaitez revenir à l’affichage du nom d’utilisateur, il suffit de remplacer message.user.first_name
par message.user.username
ou simplement message.user
.
Étape 6 : Trier les messages par date de création
Si vous avez plusieurs messages dans la base de données, ils s’afficheront dans l’ordre dans lequel ils ont été créés, avec le plus ancien en premier. Si vous souhaitez afficher les messages les plus récents en premier, modifiez la requête dans views.py
comme suit :
contexte['messages'] = Message.objects.order_by('-created_at')
L’argument '-created_at'
permet de trier les messages par leur date de création, en ordre décroissant (du plus récent au plus ancien).
Étape 7 : Créer des messages depuis l’interface utilisateur
Actuellement, nous créons des messages en passant par l’interface d’administration. Ce serait plus pratique si les utilisateurs connectés pouvaient créer des messages directement depuis la page d’index. Nous verrons comment implémenter cette fonctionnalité dans la prochaine vidéo.
Grâce à ces étapes, vous savez désormais comment récupérer et afficher des données stockées en base de données avec l’ORM de Django. Dans la prochaine étape, nous verrons comment permettre aux utilisateurs de créer des messages directement depuis l’interface de votre site.
Et dans la prochaine partie de ce tutoriel, voyons comment utiliser les formulaires django.
Je m'appelle Thomas, et je code depuis plus de 20 ans. Depuis ma sortie de la première promotion de l'École 42, j'ai conçu et développé des centaines d'applications et de sites web. Sur ce blog, je partage avec vous les stratégies les plus efficaces pour maîtriser l'art de coder et progresser rapidement.