Mis a jour le 2024-05-19, 15:38

Création du modèle

Par défaut, Django utilise une base sqlite (mais on peut changer dans DATABASES dans le fichier settings.py).
Le principe est de créer une classe par table de la base de données :

Modèle en l'absence de relations

Exemple de modèle défini dans models.py :
from django.db import models
class MyObject(models.Model):
    label = models.CharField('Nom', max_length = 5)
    description = models.CharField('Description', max_length = 100)
  
label et description sont les noms des champs qu'on va utiliser dans le code, et aussi les noms des colonnes dans la base. Les champs on un type dérivé de la classe Field (CharField, DateField, etc ...). Nom et Description sont les noms
Voir la partie migration pour la création des tables dans la base.
Par défaut, chaque modèle définit un champ id qui s'autoincrémente, c'est à dire qu'il définit implicitement un champ : id = models.AutoField(primary_key=True). Si on définit explicitement un champ comme étant une clef primaire (avec l'argument primary_key = True), ce champ id par défaut n'est plus présent.
Types de champs avec arguments (ces arguments s'appliquent souvent à beaucoup types de champs, pas seulement à celui utilisé ici) :
Arguments que l'on peut passer en plus :
Création d'un objet :
Duplication d'un objet existant : on lève l'objet et on met sa clef primaire à None :
myObj = MyModel.objects.get(id = 5)
myObj.pk = None
myObj.save()
  
attention : si c'est un objet hérité, il faut mettre à la fois pk et id à None.
Pour détuire un objet de la base :
myObj = MyModel.objects.get(id = 5)
myObj.delete()
  
attention : par défaut, ça fait un delete cascade !
Méthodes à rajouter aux classes modèles :
Propriété additionnelles qu'on peut rajouter à l'objet modèle :

Modèles avec relations 1-n ou n-n

On prend comme exemple le modèle suivant :
Relation 1-n :
Relation n-n :

Migrations

Migrations quand on crée ou on change le modèle :
Pour créer un objet dans la base à la main :
Mise à jour des objets :
Pour faire tourner un script qui utilise les modèles du projet myProject, il faut mettre au début du script :
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myProject.settings')
import django
django.setup()
  
(si on n'est pas dans myProject, rajouter aussi avant sys.path.append('/le/chemin/vers/myProject').

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert