Métaclasse dans les modèles Django

Vaibhav Vaibhav 4 décembre 2021
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"
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

Article connexe - Django Model