logo oujood
🔍

Les modèles Django

Un modèle Django est une classe Python qui représente une table en base de données. Dans ce chapitre, vous créez le modèle Membres avec ses champs, vous générez la migration correspondante et vous l'appliquez pour créer la table dans SQLite.

OUJOOD.COM

Ce qu'est un modèle Django

Un modèle Django est une classe Python qui décrit la structure d'une table en base de données. Chaque attribut de classe correspond à une colonne. Django lit ces classes et génère le SQL correspondant — vous n'écrivez pas de CREATE TABLE à la main.

Deux règles fondamentales :

  • Chaque modèle hérite de django.db.models.Model.
  • Chaque attribut de classe est une instance d'un type de champ Django (CharField, IntegerField, DateField...) qui correspond à un type de colonne SQL.

Django gère aussi automatiquement une colonne id en clé primaire auto-incrémentée sur chaque table, sauf si vous en définissez une vous-même.

La base de données SQLite par défaut

Quand vous avez créé le projet dans le chapitre Créer un projet Django, Django a généré un fichier db.sqlite3 à la racine du projet. C'est la base de données SQLite utilisée par défaut en développement — aucune installation de serveur de base de données nécessaire. Pour un projet en production, vous la remplacerez par PostgreSQL ou MySQL, mais pour apprendre, SQLite est parfait.

Créer le modèle Membres

Ouvrez membres/models.py. Django l'a créé avec ce contenu minimal :

  📋 Copier le code

from django.db import models

# Create your models here.

Ajoutez la classe Membres avec trois champs texte :

  📋 Copier le code

from django.db import models

class Membres(models.Model):
    # CharField stocke une chaîne de caractères, max_length est obligatoire
    prenom = models.CharField(max_length=255)
    nom    = models.CharField(max_length=255)
    mail   = models.CharField(max_length=255)

Les trois champs utilisent CharField, adapté aux textes courts. Le paramètre max_length est obligatoire sur CharField — il fixe la taille maximale de la colonne en base de données. Django ajoutera automatiquement une colonne id (entier, clé primaire, auto-incrémentée) sans que vous ayez à la déclarer.

Générer la migration

Le modèle existe dans le code Python, mais la table n'existe pas encore en base de données. La migration est le fichier intermédiaire que Django génère pour traduire vos modèles en SQL. Depuis le dossier contenant manage.py, lancez :

  📋 Copier le code

python manage.py makemigrations membres

Django crée le fichier membres/migrations/0001_initial.py et confirme :

  📋 Copier le code

Migrations for 'membres':
  membres\migrations\0001_initial.py
    - Create model Membres

Ce fichier contient les instructions Python que Django sait transformer en SQL. Ne le modifiez pas à la main — Django le gère.

Appliquer la migration

La migration est générée, mais pas encore exécutée. La commande migrate lit tous les fichiers de migration en attente et les applique à la base de données :

  📋 Copier le code

python manage.py migrate

La sortie confirme que la table a été créée :

  📋 Copier le code

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, membres, sessions
Running migrations:
  Applying membres.0001_initial... OK

La table membres_membres existe maintenant dans db.sqlite3. Django préfixe automatiquement le nom de la table avec le nom de l'application — ici membres_ + membres. En SQL, la requête exécutée correspond à :

  📋 Copier le code

CREATE TABLE "membres_membres" (
    "id"     integer NOT NULL PRIMARY KEY AUTOINCREMENT,
    "prenom" varchar(255) NOT NULL,
    "nom"    varchar(255) NOT NULL,
    "mail"   varchar(255) NOT NULL
);

La règle des deux commandes

À retenir : chaque fois que vous modifiez un fichier models.py — ajout de champ, suppression, changement de type — vous devez toujours exécuter ces deux commandes dans l'ordre :

  📋 Copier le code

# 1. Génère le fichier de migration (détecte les changements)
python manage.py makemigrations

# 2. Applique les migrations en attente à la base de données
python manage.py migrate

makemigrations détecte les différences entre vos modèles et l'état actuel de la base, et génère le fichier de migration. migrate exécute ce fichier et met la base à jour. Les deux sont indispensables — l'un sans l'autre ne fait rien d'utile.

Dans le chapitre suivant, vous allez ajouter des données dans cette table directement depuis le code Python, et les afficher dans un template.

Par carabde | Mis à jour le 05 mai 2025