Les modèles django et ses bases de données

Article publié le et mis à jour le .

Dans la partie précédente, on a vu comment utiliser les templates en django.

Maintenant, nous allons explorer un concept clé en Django : les modèles. Ils permettent de lire et d’écrire des données dans une base de données. Un modèle en Django est essentiellement une classe qui représente une table dans la base de données.

Créer un Modèle

Prenons l’exemple d’une application qui permet de poster des messages. Nous allons créer un modèle Message qui représente un message dans la base de données. Ce modèle aura des attributs qui correspondent aux champs dans la table en base de données.

Voici comment créer un modèle Message dans le fichier models.py :

from django.db import models
from django.contrib.auth.models import User

class Message(models.Model):
    content = models.CharField(max_length=280)
    created_at = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

Décomposons chaque partie :

  • content: Ce champ contient le texte du message. Nous utilisons un champ CharField avec une longueur maximale de 280 caractères, définie par max_length=280.
  • created_at: Pour la date de création du message, nous utilisons DateTimeField avec le paramètre auto_now_add=True. Cela remplit automatiquement la date de création du message lors de sa création.
  • user: Chaque message est lié à un utilisateur. Pour cela, nous utilisons une clé étrangère avec ForeignKey. Nous lions le modèle User de Django, qui gère les utilisateurs, et nous précisons que lorsque l’utilisateur est supprimé, tous ses messages doivent l’être aussi (on_delete=models.CASCADE).

Appliquer les Migrations

Une fois le modèle créé, il faut dire à Django de créer cette table dans la base de données. Cela se fait avec le processus de migration.

  1. Appliquer les migrations existantes : Si vous avez des migrations non appliquées (messages en rouge), tapez la commande suivante dans le terminal :

    python manage.py migrate
  2. Créer une migration pour notre modèle : Django doit générer une migration spécifique à notre modèle Message. Utilisez la commande suivante pour créer cette migration :

    python manage.py makemigrations

    Vous verrez un message confirmant que Django a détecté la création du modèle Message.

  3. Appliquer cette migration : Maintenant, nous devons appliquer cette migration pour que la table soit créée en base de données :

    python manage.py migrate

Créer un Superutilisateur

Pour interagir avec les messages via l’interface d’administration Django, il nous faut un superutilisateur. Ce compte nous permettra de gérer les utilisateurs et les messages dans une interface graphique.

Créez un superutilisateur en tapant :

python manage.py createsuperuser

Django vous demandera un nom d’utilisateur, un email (facultatif), et un mot de passe. Une fois fait, relancez le serveur et connectez-vous à l’interface d’administration via http://127.0.0.1:8000/admin.

Enregistrer le Modèle dans l’Administration

Pour pouvoir gérer les messages via l’interface d’administration, nous devons enregistrer notre modèle dans le fichier admin.py de notre application. Ajoutez ceci à admin.py :

from django.contrib import admin
from .models import Message

admin.site.register(Message)

En actualisant la page d’administration, vous verrez maintenant une nouvelle section « Messages ». Vous pouvez y créer, modifier et supprimer des messages.

Améliorer l’Affichage dans l’Admin

Actuellement, dans la page listant tous les messages, vous verrez juste “Message object (1)”, ce qui n’est pas très parlant. Pour améliorer cela, nous allons personnaliser l’affichage en modifiant admin.py :

class MessageAdmin(admin.ModelAdmin):
    list_display = ('content', 'user')

admin.site.register(Message, MessageAdmin)

Maintenant, chaque message affichera son contenu et le nom de l’utilisateur dans la liste.

Récupérer les Messages dans les Vues

Dans la prochaine vidéo, nous verrons comment récupérer ces messages depuis la base de données et les afficher dynamiquement sur notre site. Nous apprendrons également à créer de nouveaux messages directement depuis l’interface utilisateur, plutôt que via l’admin.

Et dans la prochaine partie de ce tutoriel, voyons comment utiliser l’ORM django.