{"title":"L’API _meta des modèles","version":"6.1","locale":"fr","docname":"ref/models/meta","url":"/fr/6.1/ref/models/meta/","canonical":"https://djangodocs.dev/fr/6.1/ref/models/meta/","summary":"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…","html":"<span id=\"model-meta-api\"></span><h1>L’API <code class=\"docutils literal notranslate\">_meta</code> des modèles<a class=\"heading-anchor\" href=\"#module-django.db.models.options\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.options.Options\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Options</span><a class=\"heading-anchor\" href=\"#django.db.models.options.Options\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>L’API <code class=\"docutils literal notranslate\">_meta</code> 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 <code class=\"docutils literal notranslate\">_meta</code> de chaque classe de modèle, qui est une instance d’objet <code class=\"docutils literal notranslate\">django.db.models.options.Options</code>.</p>\n<p>Les méthodes et les attributs qu’elle fournit peuvent être utilisés pour :</p>\n<ul class=\"simple\">\n<li><p>Récupérer toutes les instances de champ d’un modèle</p></li>\n<li><p>Récupérer une instance de champ unique d’un modèle par son nom</p></li>\n<li><p>Récupérer tous les champs composant la clé primaire d’un modèle</p></li>\n</ul>\n<section id=\"field-access-api\">\n<span id=\"model-meta-field-api\"></span><h2>API d’accès aux champs<a class=\"heading-anchor\" href=\"#field-access-api\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"retrieving-a-single-field-instance-of-a-model-by-name\">\n<h3>Récupération d’une instance de champ unique d’un modèle par son nom<a class=\"heading-anchor\" href=\"#retrieving-a-single-field-instance-of-a-model-by-name\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.options.Options.get_field\">\n<span class=\"sig-prename descclassname\">Options.</span><span class=\"sig-name descname\">get_field</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">field_name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.options.Options.get_field\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie une instance de champ correspondant au nom indiqué.</p>\n<p><code class=\"docutils literal notranslate\">field_name</code> 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, <code class=\"docutils literal notranslate\">field_name</code> est (par ordre de préférence) le nom <a class=\"reference internal\" href=\"/fr/6.1/ref/models/fields/#django.db.models.ForeignKey.related_query_name\" title=\"django.db.models.ForeignKey.related_query_name\"><code class=\"xref py py-attr docutils literal notranslate\">related_query_name</code></a> défini par l’utilisateur, le nom <a class=\"reference internal\" href=\"/fr/6.1/ref/models/fields/#django.db.models.ForeignKey.related_name\" title=\"django.db.models.ForeignKey.related_name\"><code class=\"xref py py-attr docutils literal notranslate\">related_name</code></a> défini par l’utilisateur ou le nom généré automatiquement par Django.</p>\n<p>Hidden fields, fields with <a class=\"reference internal\" href=\"/fr/6.1/ref/models/fields/#django.db.models.Field.hidden\" title=\"django.db.models.Field.hidden\"><code class=\"xref py py-attr docutils literal notranslate\">hidden=True</code></a>, cannot be retrieved by name.</p>\n<p>Si aucun champ du nom indiqué n’a été trouvé, une exception <a class=\"reference internal\" href=\"/fr/6.1/ref/exceptions/#django.core.exceptions.FieldDoesNotExist\" title=\"django.core.exceptions.FieldDoesNotExist\"><code class=\"xref py py-class docutils literal notranslate\">FieldDoesNotExist</code></a> est générée.</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"kn\">import</span> User\n\n<span class=\"go\"># A field on the model</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>User<span class=\"o\">.</span>_meta<span class=\"o\">.</span>get_field<span class=\"p\">(</span><span class=\"s2\">&quot;username&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;django.db.models.fields.CharField: username&gt;</span>\n\n<span class=\"go\"># A field from another model that has a relation with the current model</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>User<span class=\"o\">.</span>_meta<span class=\"o\">.</span>get_field<span class=\"p\">(</span><span class=\"s2\">&quot;logentry&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;ManyToOneRel: admin.logentry&gt;</span>\n\n<span class=\"go\"># A non existent field</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>User<span class=\"o\">.</span>_meta<span class=\"o\">.</span>get_field<span class=\"p\">(</span><span class=\"s2\">&quot;does_not_exist&quot;</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n    <span class=\"o\">...</span>\n<span class=\"gr\">FieldDoesNotExist</span>: User has no field named &#39;does_not_exist&#39;\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"retrieving-all-field-instances-of-a-model\">\n<h3>Récupération de toutes les instances de champ d’un modèle<a class=\"heading-anchor\" href=\"#retrieving-all-field-instances-of-a-model\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.options.Options.get_fields\">\n<span class=\"sig-prename descclassname\">Options.</span><span class=\"sig-name descname\">get_fields</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">include_parents<span class=\"o\">=</span><span class=\"default_value\">True</span></em>, <em class=\"sig-param\">include_hidden<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.options.Options.get_fields\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie un tuple de champs associés à un modèle. <code class=\"docutils literal notranslate\">get_fields()</code> accepte deux paramètres pouvant être utilisés pour contrôler quels champs sont renvoyés :</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\">include_parents</code></dt><dd><p><code class=\"docutils literal notranslate\">True</code> par défaut. Inclut récursivement les champs définis dans les classes parentes. Lorsque ce paramètre est défini à <code class=\"docutils literal notranslate\">False</code>, <code class=\"docutils literal notranslate\">get_fields()</code> 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.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\">include_hidden</code></dt><dd><p><code class=\"docutils literal notranslate\">False</code> by default. If set to <code class=\"docutils literal notranslate\">True</code>, <code class=\"docutils literal notranslate\">get_fields()</code> will include\nfields with <a class=\"reference internal\" href=\"/fr/6.1/ref/models/fields/#django.db.models.Field.hidden\" title=\"django.db.models.Field.hidden\"><code class=\"xref py py-attr docutils literal notranslate\">hidden=True</code></a>.</p>\n</dd>\n</dl>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"kn\">import</span> User\n<span class=\"gp\">&gt;&gt;&gt; </span>User<span class=\"o\">.</span>_meta<span class=\"o\">.</span>get_fields<span class=\"p\">()</span>\n<span class=\"go\">(&lt;ManyToOneRel: admin.logentry&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.AutoField: id&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: password&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.DateTimeField: last_login&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.BooleanField: is_superuser&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: username&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: first_name&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: last_name&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.EmailField: email&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.BooleanField: is_staff&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.BooleanField: is_active&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.DateTimeField: date_joined&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.related.ManyToManyField: groups&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.related.ManyToManyField: user_permissions&gt;)</span>\n\n<span class=\"go\"># Also include hidden fields.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>User<span class=\"o\">.</span>_meta<span class=\"o\">.</span>get_fields<span class=\"p\">(</span>include_hidden<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">(&lt;ManyToOneRel: auth.user_groups&gt;,</span>\n<span class=\"go\"> &lt;ManyToOneRel: auth.user_user_permissions&gt;,</span>\n<span class=\"go\"> &lt;ManyToOneRel: admin.logentry&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.AutoField: id&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: password&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.DateTimeField: last_login&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.BooleanField: is_superuser&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: username&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: first_name&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: last_name&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.EmailField: email&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.BooleanField: is_staff&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.BooleanField: is_active&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.DateTimeField: date_joined&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.related.ManyToManyField: groups&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.related.ManyToManyField: user_permissions&gt;)</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"retrieving-fields-composing-the-primary-key-of-a-model\">\n<h3>Récupérer les champs composant la clé primaire d’un modèle<a class=\"heading-anchor\" href=\"#retrieving-fields-composing-the-primary-key-of-a-model\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.options.Options.pk_fields\">\n<span class=\"sig-prename descclassname\">Options.</span><span class=\"sig-name descname\">pk_fields</span><a class=\"heading-anchor\" href=\"#django.db.models.options.Options.pk_fields\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie une liste des champs composant la clé primaire d’un modèle.</p>\n<p>When a <a class=\"reference internal\" href=\"/fr/6.1/ref/models/fields/#django.db.models.CompositePrimaryKey\" title=\"django.db.models.CompositePrimaryKey\"><code class=\"xref py py-class docutils literal notranslate\">CompositePrimaryKey</code></a> is defined on a model\nit will contain all the fields referenced by it.</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">TenantUser</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    pk <span class=\"o\">=</span> models<span class=\"o\">.</span>CompositePrimaryKey<span class=\"p\">(</span><span class=\"s2\">&quot;tenant_id&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">)</span>\n    tenant_id <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span>\n    <span class=\"nb\">id</span> <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span>\n</code></pre></div>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>TenantUser<span class=\"o\">.</span>_meta<span class=\"o\">.</span>pk_fields\n<span class=\"go\">[</span>\n<span class=\"go\">    &lt;django.db.models.fields.IntegerField: tenant_id&gt;,</span>\n<span class=\"go\">    &lt;django.db.models.fields.IntegerField: id&gt;</span>\n<span class=\"go\">]</span>\n</code></pre></div>\n<p>Otherwise it will contain the single field declared as the primary key of\nthe model, either explicitly with <a class=\"reference internal\" href=\"/fr/6.1/ref/models/fields/#django.db.models.Field.primary_key\" title=\"django.db.models.Field.primary_key\"><code class=\"xref py py-attr docutils literal notranslate\">primary_key=True</code></a> or implicitly as the <a class=\"reference internal\" href=\"/fr/6.1/topics/db/models/#automatic-primary-key-fields\"><span class=\"std std-ref\">automatic\nprimary key</span></a>.</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>User<span class=\"o\">.</span>_meta<span class=\"o\">.</span>pk_fields\n<span class=\"go\">[&lt;django.db.models.fields.AutoField: id&gt;]</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n</section>","rootId":"module-django.db.models.options","toc":[{"title":"API d’accès aux champs","anchor":"field-access-api","children":[{"title":"Récupération d’une instance de champ unique d’un modèle par son nom","anchor":"retrieving-a-single-field-instance-of-a-model-by-name","children":[]},{"title":"Récupération de toutes les instances de champ d’un modèle","anchor":"retrieving-all-field-instances-of-a-model","children":[]},{"title":"Récupérer les champs composant la clé primaire d’un modèle","anchor":"retrieving-fields-composing-the-primary-key-of-a-model","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/6.1/ref/"},{"docname":"ref/models/index","title":"Modèles","url":"/fr/6.1/ref/models/"}],"prev":{"docname":"ref/models/constraints","title":"Référence des contraintes","url":"/fr/6.1/ref/models/constraints/"},"next":{"docname":"ref/models/relations","title":"Référence des objets liés","url":"/fr/6.1/ref/models/relations/"},"formats":{"html":"/fr/6.1/ref/models/meta/","markdown":"/fr/6.1/ref/models/meta.md","json":"/fr/6.1/ref/models/meta.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/ref/models/meta.txt","official":"https://docs.djangoproject.com/fr/6.1/ref/models/meta/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}