L'ORM de django pour faire des requêtes sans SQL

Article publié le et mis à jour le .

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.