Les modèles de django

1 - A propos des modèles Django

Afin d'organiser les données du stockage de votre app, django vous offre l'outil nommé modèle (django model).

  1. Un modèle abrite sous forme des classes les noms des tables et des champs (attributs) des données du stockage.
  2. Chaque modèle correspond à une seule table de base de données.
  3. Chaque modèle est une classe Python qui hérite de django.db.models.Model.
  4. Chaque attribut du modèle représente un champ de base de données.

2 -  Les différents types de champs dans un modèle django

Django modèle fourni une variété de types de champs:

  1. AutoField : designe un champ du type entier qui s'incrémente automatiquement.
  2. BigAutoField : il s'agit d'un entier 64 bits, un peu comme un AutoField, sauf qu'il est garanti qu'il peut contenir des nombres de 1 à 9223372036854775807.
  3. BigIntegerField : il s'agit d'un entier 64 bits, un peu comme un IntegerField, sauf qu'il est garanti qu'il s'adapte aux nombres de -9223372036854775808 à 9223372036854775807.
  4. BinaryField : un champ pour stocker des données binaires brutes.
  5. BooleanField : un champ vrai / faux. Le widget de formulaire par défaut pour ce champ est un CheckboxInput.
  6. CharField : il s'agit d'un champ de texte destiné au stockage des petites chaines de caractères.
  7. DateTimeField : il s'agit d'une date, représentée en Python par une instance datetime.date.
  8. DecimalField : il s'agit d'un nombre décimal à précision fixe, représenté en Python par une instance Decimal.
  9. DurationField : un champ pour stocker des périodes de temps.
  10. EmailField : il s'agit d'un CharField qui vérifie que la valeur est une adresse e-mail valide.
  11. FileField : il s'agit d'un champ de téléchargement de fichiers.
  12. FloatField : il s'agit d'un nombre à virgule flottante représenté en Python par une instance flottante.
  13. ImageField : il hérite de tous les attributs et méthodes de FileField, mais exige également que l'objet téléchargé soit une image valide.
  14. IntegerField : il s'agit d'un champ entier. Les valeurs de -2147483648 à 2147483647 sont sûres dans toutes les bases de données prises en charge par Django.
  15. NullBooleanField : comme un BooleanField, mais autorise NULL comme l'une des options.
  16. PositiveIntegerField : comme un IntegerField, mais doit être positif ou nul (0). Les valeurs de 0 à 2147483647 sont sûres dans toutes les bases de données prises en charge par Django.
  17. SmallIntegerField : comme un IntegerField, mais n'autorise que les valeurs sous un certain point (dépendant de la base de données).
  18. TextField : un large champ de texte. Le widget de formulaire par défaut pour ce champ est une zone de texte.
  19. TimeField : un champ qui représente l'heure, représentée en Python par une instance datetime.time.

3 - Création d'un modèle Django

Avant de passer à la création d'un modèle, il faut au préalable enregistrer votre app:

Ajoutez votre app au fichier mysite/settings.py:

INSTALLED_APPS = [
    'myapp.apps.MyappConfig',
    ########,
    ########,
]

En voici un exemple permettant de créer un modèle nommé Students possédant les champs : firstName, lastName, email et adress:

Ajouter le code ci-dessous au fichier myapp/models.py

class Students(models.Model):  
    name        = models.CharField(max_length=25)      
    email       = models.EmailField(max_length=40)  
	phone    = models.IntegerField(max_length=40)
    section      = models.CharField(max_length=25)

Ceux-ci créera une table SQLite formée des champs : firstName, lastName, email et adress, mais pas avant que les migrations nécessaires soient crées:

A ce effet, exécuter en ligne de commande:

python manage.py makemigrations myapp

et ensuite :

python manage.py migrate

4 - Ajouter le modèle à la zone admin

Afin de pouvoir gérer le modèle qu'on vient de créer il est donc nécessaire de le charger dans la zone admin du site. Pour ce faire, il suffit d'éditer le fichier myapp/admin.py en ajoutant les lignes de codes:

myapp/admin.py
from django.contrib import admin
from .models import Students
admin.site.register(Students)

Si vous accéder maintenant à la zone admin du site, vous trouver la rubrique Students, qui vous donne la possibilité d'édition et de modification:

5 - Amélioration de l'affichage au niveau de la zone admin

Nous pouvons maintenant améliorer l'affichage des enregistrements au niveau de la zone admin en affichant la liste des noms, des emails, des sections... A cet effet nous devons importer le module admin depuis django.contrib sur le fichier models.py:

from django.contrib import admin

On crée ensuite une classe  au sein du fichier models.py  qui hérite de la classe admin.ModelAdmin qui permet  d'indiquer la liste des attributs à afficher et les attributs selon lesquels s’effectue le filtrage des enregistrements:

models.py
class StudentsAdmin(admin.ModelAdmin):
    list_display = ('name' , 'email' ,  'section')
    list_filter = ('name',)

Voici le code final du fichier models.py

models.py
from django.contrib import admin
class Students(models.Model):
    name     = models.CharField(max_length=25)
    email    = models.EmailField(max_length=40)
    phone    = models.IntegerField(max_length=40)
    section  = models.CharField(max_length=25)

class StudentsAdmin(admin.ModelAdmin):
    list_display = ('name' , 'email' ,  'section')
    list_filter = ('name',)

Il reste maintenant quelques modifications au niveau du fichiers admin.py au sein duquel on doit importer et enregistrer la classe StudentsAdmin qu'on vient de créer:

admin.py
from django.contrib import admin
from studentsApp.models import Students , StudentsAdmin

admin.site.register(Students , StudentsAdmin)

Et finalement en accédant à la zone admin on s'aperçoit qu'il y a effectivement amélioration de l'affichage des résultats faisant apparaitre la liste des noms, des eamils, des sections...

django-contrib-model-admin

 

Younes Derfoufi
CRMEF OUJDA

4 thoughts on “Les modèles de django

    1. Je vous en prie ousmane pour le commentaire ! Ce que tu demande fera l’objet d’un nouveau tuto! C’est la création d’un blog à l’aide de djange et ça viendra prochainement

Leave a Reply

Your email address will not be published. Required fields are marked *