Mis a jour le 2017-12-03, 22:17

Création du modèle

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(max_length = 5)
    description = models.CharField(max_length = 100)
  
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