Métaclasse dans les modèles Django
Les métadonnées font référence à un ensemble spécifique de données qui fournit des informations sur d’autres données. Dans Django, nous utilisons des modèles Django pour concevoir les tables de notre base de données et leurs champs. Si nous devons ajouter des données sur le modèle lui-même, nous utilisons la classe Meta
. En savoir plus sur la classe Meta
dans les modèles Django dans cet article.
La classe Meta
à Django
La classe Meta
est une classe interne, ce qui signifie qu’elle est définie à l’intérieur du modèle comme suit :
from django.db import models
class MyModel(models.Model):
...
class Meta:
...
La classe Meta
peut être utilisée pour définir diverses choses sur le modèle telles que les autorisations, le nom de la base de données, les noms au singulier et au pluriel, l’abstraction, l’ordre, etc. L’ajout de classes Meta
aux modèles Django est entièrement facultatif.
Cette classe est également livrée avec de nombreuses options que vous pouvez configurer. Voici quelques-unes des méta-options couramment utilisées ; vous pouvez explorer toutes les méta-options ici
Django Meta Option - Abstrait
Cette option permet de définir si le modèle est abstrait ou non ; ils fonctionnent de la même manière que les classes abstraites. Les classes abstraites sont celles qui ne peuvent pas être instanciées et peuvent uniquement être étendues ou héritées.
Les modèles définis comme abstraits peuvent uniquement être hérités. On peut utiliser cette option s’il existe plusieurs modèles avec des champs communs.
from django.db import models
class Human(models.Model):
genders = (
("M", "Male"),
("F", "Female"),
("NB", "Non-binary"),
("T", "Transgender"),
("I", "Intersex"),
("O", "Other"),
("PNTS", "Prefer not to say"),
)
name = models.CharField(max_length=200)
age = models.IntegerField(default=0)
gender = models.CharField(max_length=50, choices=genders)
class Meta:
abstract = True # Important
class Teacher(Human):
subject = models.CharField(max_length=200)
class Student(Human):
grade = models.IntegerField(default=0)
Ici, les modèles Teacher
et Student
auront tous les champs à l’intérieur du modèle Human
. À l’intérieur de la base de données, seuls les modèles Teacher
et Student
seront créés.
Django Meta Option - db_table
Cette option est utilisée pour définir le nom qui doit être utilisé pour identifier la table dans la base de données. Par exemple : si je fais quelque chose comme suit, le nom de mon modèle sera job
dans la base de données.
from django.db import models
class JobPosting(models.Model):
class Meta:
db_table = "job"
Django Meta Option - Commande
Cette option prend une liste de valeurs de chaîne, qui sont des champs de modèle. Il est utilisé pour définir l’ordre des objets d’un modèle. Lorsque les objets de ce modèle seront récupérés, ils seront présents dans cet ordre.
from django.db import models
class JobPosting(models.Model):
dateTimeOfPosting = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ["-dateTimeOfPosting"]
Dans l’exemple ci-dessus, les objets récupérés seront classés en fonction du champ dateTimeOfPosting
par ordre décroissant. (Le préfixe -
est utilisé pour définir un ordre décroissant.)
Django Meta Option - verbose_name
Cette option est utilisée pour définir un nom singulier lisible par l’homme pour un modèle et écrasera la convention de nommage par défaut de Django. Ce nom apparaîtra également dans le panneau d’administration (/admin/
).
from django.db import models
class JobPosting(models.Model):
class Meta:
verbose_name = "Job Posting"
Django Meta Option - Verbose_name_plural
Cette option est utilisée pour définir un nom pluriel lisible par l’homme pour un modèle, qui à nouveau écrasera la convention de nommage par défaut de Django. Ce nom apparaîtra également dans le panneau d’administration (/admin/
).
from django.db import models
class JobPosting(models.Model):
class Meta:
verbose_name_plural = "Job Postings"