Aller au contenu

Modèles & Migrations

Configurer la base de données de l'application avec les migrations et les modèles Django.


Migrations

Une migration est un ensemble d'instructions permettant de passer le schéma de notre base de données d'un état à un autre. Elles représentent un moyen de configurer la base de données de notre application.

Les commandes Docker ne sont pas les mêmes que celles de Django. Pour créer notre base de données :

$ docker compose exec web python3 manage.py migrate

Permet de forcer une migration :

$ docker compose exec web python3 manage.py migrate --fake APPNAME zero

Créer une application

Création de notre application, ici pong :

$ docker compose exec web python3 manage.py startapp pong

./pong est un répertoire d'application :

  • chaque répertoire d'application est spécifique à une application ;
  • une application est une sous-section de votre projet entier.

Répertoire du projet

./apps est un répertoire de projet : il contient l'ensemble du projet, c'est la tour de contrôle.

Pour installer l'application pong dans notre projet, aller dans website/settings.py et ajouter 'pong' au début de INSTALLED_APPS.

Pour créer un super utilisateur :

$ docker compose exec web python3 manage.py createsuperuser

Définir les modèles

Un modèle définit les caractéristiques que nous voulons stocker. Les caractéristiques sont définies par des champs.

  • id sert de clé primaire : un identifiant unique pour chaque table.
  • La structure d'une base de données est appelée schéma.

Pour changer l'état de notre base de données, nous utilisons une migration (ensemble d'instructions).

Ajouter d'abord le modèle dans models.py :

# pong/models.py

class Player(models.Model):
    name = models.fields.CharField(max_length=100)

Héritage de models.Model

Cette classe est nommée Player et hérite de models.Model, la classe de base des modèles de Django.

Créer le modèle :

$ docker compose exec web python3 manage.py makemigrations

Le mettre à jour :

$ docker compose exec web python3 manage.py migrate

Pour avoir la classe Player sur l'administration :

# pong/admin.py

from pong.models import Player
admin.site.register(Player)

Manipuler les données dans le shell

Lancement du shell Django :

$ docker compose exec web python3 manage.py shell

Travailler avec le modèle Player :

>>> from pong.models import Player

Ajouter un élément :

>>> player = Player.objects.create(name='Foo Fighters')

Récupérer un objet grâce à son id :

>>> player = Player.objects.get(id=1)
>>> player.name

Voir tous les objets :

>>> Player.objects.all()

Savoir combien d'éléments il y a :

>>> Player.objects.count()

Supprimer le premier élément :

>>> tmp = Player.objects.get(id=1)
>>> tmp.delete()

Supprimer tous les éléments :

>>> tmp = Player.objects.all()
>>> tmp.delete()