_meta des modèles¶L’API _meta des modèles est au cœur de l’ORM de Django. Elle permet à d’autres parties du système telles que les recherches, les requêtes, les formulaires et le site d’administration de comprendre les capacités de chaque modèle. L’API est accessible au travers de l’attribut _meta de chaque classe de modèle, qui est une instance d’objet django.db.models.options.Options.
Les méthodes et les attributs qu’elle fournit peuvent être utilisés pour :
Récupérer toutes les instances de champ d’un modèle
Récupérer une instance de champ unique d’un modèle par son nom
Récupérer tous les champs composant la clé primaire d’un modèle
Renvoie une instance de champ correspondant au nom indiqué.
field_name peut être le nom d’un champ du modèle, d’un champ d’un modèle abstrait ou hérité, ou d’un champ défini sur un autre modèle pointant vers ce modèle. Dans ce dernier cas, field_name est (par ordre de préférence) le nom related_query_name défini par l’utilisateur, le nom related_name défini par l’utilisateur ou le nom généré automatiquement par Django.
Hidden fields, fields with hidden=True, cannot be retrieved by name.
Si aucun champ du nom indiqué n’a été trouvé, une exception FieldDoesNotExist est générée.
>>> from django.contrib.auth.models import User
# A field on the model
>>> User._meta.get_field("username")
<django.db.models.fields.CharField: username>
# A field from another model that has a relation with the current model
>>> User._meta.get_field("logentry")
<ManyToOneRel: admin.logentry>
# A non existent field
>>> User._meta.get_field("does_not_exist")
Traceback (most recent call last):
...
FieldDoesNotExist: User has no field named 'does_not_exist'
Renvoie un tuple de champs associés à un modèle. get_fields() accepte deux paramètres pouvant être utilisés pour contrôler quels champs sont renvoyés :
include_parentsTrue par défaut. Inclut récursivement les champs définis dans les classes parentes. Lorsque ce paramètre est défini à False, get_fields() ne renvoie que les champs déclarés directement sur le modèle concerné. Les champs de modèles qui héritent directement de modèles abstraits ou de classes mandataires sont considérés comme locaux, et non pas définis sur le parent.
include_hiddenFalse by default. If set to True, get_fields() will include
fields with hidden=True.
>>> from django.contrib.auth.models import User
>>> User._meta.get_fields()
(<ManyToOneRel: admin.logentry>,
<django.db.models.fields.AutoField: id>,
<django.db.models.fields.CharField: password>,
<django.db.models.fields.DateTimeField: last_login>,
<django.db.models.fields.BooleanField: is_superuser>,
<django.db.models.fields.CharField: username>,
<django.db.models.fields.CharField: first_name>,
<django.db.models.fields.CharField: last_name>,
<django.db.models.fields.EmailField: email>,
<django.db.models.fields.BooleanField: is_staff>,
<django.db.models.fields.BooleanField: is_active>,
<django.db.models.fields.DateTimeField: date_joined>,
<django.db.models.fields.related.ManyToManyField: groups>,
<django.db.models.fields.related.ManyToManyField: user_permissions>)
# Also include hidden fields.
>>> User._meta.get_fields(include_hidden=True)
(<ManyToOneRel: auth.user_groups>,
<ManyToOneRel: auth.user_user_permissions>,
<ManyToOneRel: admin.logentry>,
<django.db.models.fields.AutoField: id>,
<django.db.models.fields.CharField: password>,
<django.db.models.fields.DateTimeField: last_login>,
<django.db.models.fields.BooleanField: is_superuser>,
<django.db.models.fields.CharField: username>,
<django.db.models.fields.CharField: first_name>,
<django.db.models.fields.CharField: last_name>,
<django.db.models.fields.EmailField: email>,
<django.db.models.fields.BooleanField: is_staff>,
<django.db.models.fields.BooleanField: is_active>,
<django.db.models.fields.DateTimeField: date_joined>,
<django.db.models.fields.related.ManyToManyField: groups>,
<django.db.models.fields.related.ManyToManyField: user_permissions>)
Renvoie une liste des champs composant la clé primaire d’un modèle.
When a CompositePrimaryKey is defined on a model
it will contain all the fields referenced by it.
from django.db import models
class TenantUser(models.Model):
pk = models.CompositePrimaryKey("tenant_id", "id")
tenant_id = models.IntegerField()
id = models.IntegerField()
>>> TenantUser._meta.pk_fields
[
<django.db.models.fields.IntegerField: tenant_id>,
<django.db.models.fields.IntegerField: id>
]
Otherwise it will contain the single field declared as the primary key of
the model, either explicitly with primary_key=True or implicitly as the automatic
primary key.
>>> User._meta.pk_fields
[<django.db.models.fields.AutoField: id>]
août 05, 2026