{"title":"L’infrastructure des types de contenus (contenttypes)","version":"1.9","locale":"fr","docname":"ref/contrib/contenttypes","url":"/fr/1.9/ref/contrib/contenttypes/","canonical":"https://djangodocs.dev/fr/1.9/ref/contrib/contenttypes/","summary":"Django inclut une application contenttypes qui permet de recenser l’ensemble des modèles installés dans un projet Django, fournissant une interface générique de…","html":"<span id=\"the-contenttypes-framework\"></span><h1>L’infrastructure des types de contenus (contenttypes)<a class=\"heading-anchor\" href=\"#module-django.contrib.contenttypes\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django inclut une application <a class=\"reference internal\" href=\"#module-django.contrib.contenttypes\" title=\"django.contrib.contenttypes: Provides generic interface to installed models.\"><code class=\"xref py py-mod docutils literal notranslate\">contenttypes</code></a> qui permet de recenser l’ensemble des modèles installés dans un projet Django, fournissant une interface générique de haut niveau pour travailler avec les modèles.</p>\n<section id=\"overview\">\n<h2>Aperçu<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Le cœur de l’application contenttypes est le modèle <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a>, définir dans <code class=\"docutils literal notranslate\">django.contrib.contenttypes.models.ContentType</code>. Les instances de <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> représentent et stockent des informations sur les modèles installés dans un projet ; de nouvelles instances de <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> sont automatiquement créées à chaque fois que de nouveaux modèles sont installés.</p>\n<p>Les instances de <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> ont des méthodes pour renvoyer les classes de modèle qu’elles représentent et pour interroger les objets de ces modèles. <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> dispose également d’un <a class=\"reference internal\" href=\"/fr/1.9/topics/db/managers/#custom-managers\"><span class=\"std std-ref\">gestionnaire personnalisé</span></a> qui ajoute des méthodes pour travailler avec <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> et pour obtenir des instances de <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> pour un modèle particulier.</p>\n<p>Les relations entre vos modèles et <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> peuvent également être utilisées pour établir des relations « génériques » entre une instance d’un de vos modèles et des instances de n’importe quel autre modèle que vous avez installé.</p>\n</section>\n<section id=\"installing-the-contenttypes-framework\">\n<h2>Installation du système contenttypes<a class=\"heading-anchor\" href=\"#installing-the-contenttypes-framework\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Le système contenttypes est inclus par défaut dans la liste <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> créée par <code class=\"docutils literal notranslate\">django-admin startproject</code>, mais si vous l’avez supprimé ou si vous définissez manuellement votre liste <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>, vous pouvez l’activer en ajoutant <code class=\"docutils literal notranslate\">'django.contrib.contenttypes'</code> à votre réglage <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>.</p>\n<p>C’est généralement une bonne idée d’avoir l’application contenttypes installée ; plusieurs autres applications fournies avec Django ont en besoin :</p>\n<ul class=\"simple\">\n<li><p>L’application d’administration l’utilise pour tracer l’historique de chaque objet ajouté ou modifié via l’interface d’administration.</p></li>\n<li><p>Le <a class=\"reference internal\" href=\"/fr/1.9/topics/auth/#module-django.contrib.auth\" title=\"django.contrib.auth: Django's authentication framework.\"><code class=\"xref py py-mod docutils literal notranslate\">système d'authentification</code></a> de Django l’utilise pour associer les permissions des utilisateurs à des modèles spécifiques.</p></li>\n</ul>\n</section>\n<section id=\"the-contenttype-model\">\n<h2>Le modèle <code class=\"docutils literal notranslate\">ContentType</code><a class=\"heading-anchor\" href=\"#the-contenttype-model\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.models.ContentType\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ContentType</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.models.ContentType\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Chaque instance de <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> a deux champs qui, pris ensemble, décrivent de manière unique un modèle installé :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.models.ContentType.app_label\">\n<span class=\"sig-name descname\">app_label</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.models.ContentType.app_label\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le nom de l’application dont le modèle fait partie. Il provient de l’attribut <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType.app_label\" title=\"django.contrib.contenttypes.models.ContentType.app_label\"><code class=\"xref py py-attr docutils literal notranslate\">app_label</code></a> du modèle et ne comprend que la <em>dernière</em> partie du chemin d’importation Python de l’application ; par exemple, l’attribut <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType.app_label\" title=\"django.contrib.contenttypes.models.ContentType.app_label\"><code class=\"xref py py-attr docutils literal notranslate\">app_label</code></a> de « django.contrib.contenttypes » devient « contenttypes ».</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.models.ContentType.model\">\n<span class=\"sig-name descname\">model</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.models.ContentType.model\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le nom de classe du modèle.</p>\n</dd></dl>\n\n<p>De plus, la propriété suivante est disponible :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.models.ContentType.name\">\n<span class=\"sig-name descname\">name</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.models.ContentType.name\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le nom lisible du type de contenu. Il provient de l’attribut <a class=\"reference internal\" href=\"/fr/1.9/ref/models/fields/#django.db.models.Field.verbose_name\" title=\"django.db.models.Field.verbose_name\"><code class=\"xref py py-attr docutils literal notranslate\">verbose_name</code></a> du modèle.</p>\n</dd></dl>\n\n</dd></dl>\n\n<aside class=\"version-note version-changed\" data-version=\"1.8\">\n<p class=\"version-note-title\">Changed in Django 1.8</p><p>Avant Django 1.8, la propriété <code class=\"docutils literal notranslate\">name</code> était un champ réel du modèle <code class=\"docutils literal notranslate\">ContentType</code>.</p>\n</aside>\n<p>Examinons un exemple pour voir comment cela fonctionne. Si l’application <a class=\"reference internal\" href=\"#module-django.contrib.contenttypes\" title=\"django.contrib.contenttypes: Provides generic interface to installed models.\"><code class=\"xref py py-mod docutils literal notranslate\">contenttypes</code></a> est déjà installée, que vous ajoutez ensuite l’application <a class=\"reference internal\" href=\"/fr/1.9/ref/contrib/sites/#module-django.contrib.sites\" title=\"django.contrib.sites: Lets you operate multiple websites from the same database and Django project\"><code class=\"xref py py-mod docutils literal notranslate\">sites</code></a> à votre réglage <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> et que vous exécutez <code class=\"docutils literal notranslate\">manage.py migrate</code> pour l’installer, le modèle <a class=\"reference internal\" href=\"/fr/1.9/ref/contrib/sites/#django.contrib.sites.models.Site\" title=\"django.contrib.sites.models.Site\"><code class=\"xref py py-class docutils literal notranslate\">django.contrib.sites.models.Site</code></a> sera installé dans votre base de données. Dans le même temps, une nouvelle instance de <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> sera créée avec les valeurs suivantes :</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType.app_label\" title=\"django.contrib.contenttypes.models.ContentType.app_label\"><code class=\"xref py py-attr docutils literal notranslate\">app_label</code></a> sera défini à <code class=\"docutils literal notranslate\">'sites'</code> (la dernière partie du chemin Python de « django.contrib.sites »).</p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType.model\" title=\"django.contrib.contenttypes.models.ContentType.model\"><code class=\"xref py py-attr docutils literal notranslate\">model</code></a> sera défini à <code class=\"docutils literal notranslate\">'site'</code>.</p></li>\n</ul>\n</section>\n<section id=\"methods-on-contenttype-instances\">\n<h2>Méthodes des instances <code class=\"docutils literal notranslate\">ContentType</code><a class=\"heading-anchor\" href=\"#methods-on-contenttype-instances\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Chaque instance <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> possède des méthodes qui permettent de passer d’une instance <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> au modèle qu’elle représente, ou de récupérer des objets à partir de ce modèle :</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.models.ContentType.get_object_for_this_type\">\n<span class=\"sig-prename descclassname\">ContentType.</span><span class=\"sig-name descname\">get_object_for_this_type</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.models.ContentType.get_object_for_this_type\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Accepte un ensemble de <a class=\"reference internal\" href=\"/fr/1.9/topics/db/queries/#field-lookups-intro\"><span class=\"std std-ref\">paramètres de recherche</span></a> valides pour le modèle que <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> représente, et réalise <a class=\"reference internal\" href=\"/fr/1.9/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\">une recherche get()</code></a> sur ce modèle, renvoyant l’objet correspondant.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.models.ContentType.model_class\">\n<span class=\"sig-prename descclassname\">ContentType.</span><span class=\"sig-name descname\">model_class</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.models.ContentType.model_class\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie la classe du modèle représenté par cette instance <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a>.</p>\n</dd></dl>\n\n<p>Par exemple, nous pourrions chercher le <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> du modèle <a class=\"reference internal\" href=\"/fr/1.9/ref/contrib/auth/#id0\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.models</span> <span class=\"kn\">import</span> ContentType\n<span class=\"gp\">&gt;&gt;&gt; </span>ContentType<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>app_label<span class=\"o\">=</span><span class=\"s2\">&quot;auth&quot;</span><span class=\"p\">,</span> model<span class=\"o\">=</span><span class=\"s2\">&quot;user&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;ContentType: user&gt;</span>\n</code></pre></div>\n<p>Puis l’utiliser pour rechercher un <a class=\"reference internal\" href=\"/fr/1.9/ref/contrib/auth/#id0\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a> particulier ou pour accéder à la classe du modèle <code class=\"docutils literal notranslate\">User</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>user_type<span class=\"o\">.</span>model_class<span class=\"p\">()</span>\n<span class=\"go\">&lt;class &#39;django.contrib.auth.models.User&#39;&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>user_type<span class=\"o\">.</span>get_object_for_this_type<span class=\"p\">(</span>username<span class=\"o\">=</span><span class=\"s1\">&#39;Guido&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;User: Guido&gt;</span>\n</code></pre></div>\n<p>Ensemble, <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType.get_object_for_this_type\" title=\"django.contrib.contenttypes.models.ContentType.get_object_for_this_type\"><code class=\"xref py py-meth docutils literal notranslate\">get_object_for_this_type()</code></a> et <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType.model_class\" title=\"django.contrib.contenttypes.models.ContentType.model_class\"><code class=\"xref py py-meth docutils literal notranslate\">model_class()</code></a> permettent deux cas d’utilisation extrêmement importants :</p>\n<ol class=\"arabic simple\">\n<li><p>En utilisant ces méthodes, vous pouvez écrire du code générique de haut niveau qui effectue des requêtes sur n’importe quel modèle installé ; au lieu d’importer et d’utiliser une unique classe de modèle spécifique, vous pouvez passer des variables <code class=\"docutils literal notranslate\">app_label</code> et <code class=\"docutils literal notranslate\">model</code> pour chercher un objet <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> au moment de l’exécution, et travailler ensuite avec la classe de modèle ou récupérer des objets avec.</p></li>\n<li><p>Vous pouvez associer un autre modèle à un objet <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> afin de lier ses instances à certaines classes de modèle, et utiliser ces méthodes pour obtenir l’accès à ces classes de modèle.</p></li>\n</ol>\n<p>Plusieurs des applications intégrées à Django font usage de cette dernière technique. Par exemple, le <a class=\"reference internal\" href=\"/fr/1.9/ref/contrib/auth/#id2\" title=\"django.contrib.auth.models.Permission\"><code class=\"xref py py-class docutils literal notranslate\">système de permissions</code></a> dans le système d’authentification de Django utilise un modèle <a class=\"reference internal\" href=\"/fr/1.9/ref/contrib/auth/#id2\" title=\"django.contrib.auth.models.Permission\"><code class=\"xref py py-class docutils literal notranslate\">Permission</code></a> avec une clé étrangère vers <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a>; cela permet à <a class=\"reference internal\" href=\"/fr/1.9/ref/contrib/auth/#id2\" title=\"django.contrib.auth.models.Permission\"><code class=\"xref py py-class docutils literal notranslate\">Permission</code></a> de représenter des concepts tels que « peut ajouter une entrée de blog » ou « peut supprimer une actualité ».</p>\n<section id=\"the-contenttypemanager\">\n<h3>Le gestionnaire <code class=\"docutils literal notranslate\">ContentTypeManager</code><a class=\"heading-anchor\" href=\"#the-contenttypemanager\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.models.ContentTypeManager\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ContentTypeManager</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.models.ContentTypeManager\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> possède aussi un gestionnaire personnalisé, <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentTypeManager\" title=\"django.contrib.contenttypes.models.ContentTypeManager\"><code class=\"xref py py-class docutils literal notranslate\">ContentTypeManager</code></a>, qui ajoute les méthodes suivantes :</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.models.ContentTypeManager.clear_cache\">\n<span class=\"sig-name descname\">clear_cache</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.models.ContentTypeManager.clear_cache\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Efface un cache interne utilisé par <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> pour garder une trace des modèles pour lesquels il a créé des instances <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a>. Vous n’aurez probablement jamais besoin d’appeler cette méthode de vous-même ; Django l’appelle automatiquement lorsque c’est nécessaire.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.models.ContentTypeManager.get_for_id\">\n<span class=\"sig-name descname\">get_for_id</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">id</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.models.ContentTypeManager.get_for_id\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Recherche un <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> par son identifiant. Comme cette méthode utilise le même cache partagé que <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentTypeManager.get_for_model\" title=\"django.contrib.contenttypes.models.ContentTypeManager.get_for_model\"><code class=\"xref py py-meth docutils literal notranslate\">get_for_model()</code></a>, il est préférable d’utiliser cette méthode à l’habituel <code class=\"docutils literal notranslate\">ContentType.objects.get (pk=id)</code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.models.ContentTypeManager.get_for_model\">\n<span class=\"sig-name descname\">get_for_model</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model</em>, <em class=\"sig-param\">for_concrete_model<span class=\"o\">=</span><span class=\"default_value\">True</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.models.ContentTypeManager.get_for_model\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Accepte soit une classe de modèle, soit une instance de modèle, et renvoie l’instance <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> représentant ce modèle. <code class=\"docutils literal notranslate\">for_concrete_model=False</code> permet de récupérer l’instance <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> d’un modèle mandataire.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.models.ContentTypeManager.get_for_models\">\n<span class=\"sig-name descname\">get_for_models</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>models</em>, <em class=\"sig-param\">for_concrete_models<span class=\"o\">=</span><span class=\"default_value\">True</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.models.ContentTypeManager.get_for_models\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Accepte un nombre variable de classes de modèle et renvoie un dictionnaire associant les classes de modèle aux instances <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> qui les représentent. <code class=\"docutils literal notranslate\">for_concrete_model=False</code> permet de récupérer les instances <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> de modèles mandataires.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.models.ContentTypeManager.get_by_natural_key\">\n<span class=\"sig-name descname\">get_by_natural_key</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">app_label</em>, <em class=\"sig-param\">model</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.models.ContentTypeManager.get_by_natural_key\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie l’instance <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> identifiée de façon unique par l’étiquette d’application et le nom du modèle donnés. L’objectif principal de cette méthode est de permettre aux objets <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> d’être référencés par une <a class=\"reference internal\" href=\"/fr/1.9/topics/serialization/#topics-serialization-natural-keys\"><span class=\"std std-ref\">clé naturelle</span></a> pendant la désérialisation.</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>La méthode <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentTypeManager.get_for_model\" title=\"django.contrib.contenttypes.models.ContentTypeManager.get_for_model\"><code class=\"xref py py-meth docutils literal notranslate\">get_for_model()</code></a> est particulièrement utile lorsque vous savez que vous devez travailler avec un <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> mais que vous ne voulez pas vous soucier d’obtenir les métadonnées du modèle pour effectuer une recherche manuelle :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code 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>ContentType<span class=\"o\">.</span>objects<span class=\"o\">.</span>get_for_model<span class=\"p\">(</span>User<span class=\"p\">)</span>\n<span class=\"go\">&lt;ContentType: user&gt;</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"generic-relations\">\n<span id=\"module-django.contrib.contenttypes.fields\"></span><span id=\"id1\"></span><h2>Relations génériques<a class=\"heading-anchor\" href=\"#generic-relations\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>L’ajout d’une clé étrangère depuis l’un de vos propres modèles vers un <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> permet au modèle de se lier efficacement à une autre classe de modèle, comme dans l’exemple du modèle <a class=\"reference internal\" href=\"/fr/1.9/ref/contrib/auth/#id2\" title=\"django.contrib.auth.models.Permission\"><code class=\"xref py py-class docutils literal notranslate\">Permission</code></a> ci-dessus. Mais il est possible d’aller encore plus loin et d’utiliser <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> pour permettre de véritables relations génériques (parfois appelées « polymorphes ») entre les modèles.</p>\n<p>Un exemple simple est un système d’étiquetage, qui pourrait ressembler à ceci :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"kn\">import</span> GenericForeignKey\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.models</span> <span class=\"kn\">import</span> ContentType\n\n<span class=\"k\">class</span> <span class=\"nc\">TaggedItem</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    tag <span class=\"o\">=</span> models<span class=\"o\">.</span>SlugField<span class=\"p\">()</span>\n    content_type <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>ContentType<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    object_id <span class=\"o\">=</span> models<span class=\"o\">.</span>PositiveIntegerField<span class=\"p\">()</span>\n    content_object <span class=\"o\">=</span> GenericForeignKey<span class=\"p\">(</span><span class=\"s1\">&#39;content_type&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;object_id&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>              <span class=\"c1\"># __unicode__ on Python 2</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>tag\n</code></pre></div>\n<p>Une clé <a class=\"reference internal\" href=\"/fr/1.9/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a> normale ne peut « pointer » que vers un seul autre modèle, ce qui signifie que si le modèle <code class=\"docutils literal notranslate\">TaggedItem</code> utilisait une clé <a class=\"reference internal\" href=\"/fr/1.9/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>, il devrait choisir un et un seul modèle pour stocker les étiquettes associées. L’application contenttypes fournit un type de champ spécial (<code class=\"docutils literal notranslate\">GenericForeignKey</code>) qui résout cette problématique et permet que la relation se fasse avec n’importe quel modèle :</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.fields.GenericForeignKey\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">GenericForeignKey</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.fields.GenericForeignKey\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Il y a trois étapes à suivre pour mettre en place une <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericForeignKey\" title=\"django.contrib.contenttypes.fields.GenericForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">GenericForeignKey</code></a>:</p>\n<ol class=\"arabic simple\">\n<li><p>Ajoutez à votre modèle une clé <a class=\"reference internal\" href=\"/fr/1.9/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a> vers <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a>. Le nom usuel de ce champ est « content_type ».</p></li>\n<li><p>Ajoutez à votre modèle un champ qui peut stocker des valeurs de clé primaire provenant des modèles qui feront l’objet du lien. Pour la plupart des modèles, cela correspond à un champ <a class=\"reference internal\" href=\"/fr/1.9/ref/models/fields/#django.db.models.PositiveIntegerField\" title=\"django.db.models.PositiveIntegerField\"><code class=\"xref py py-class docutils literal notranslate\">PositiveIntegerField</code></a>. Le nom usuel de ce champ est « object_id ».</p></li>\n<li><p>Ajoutez à votre modèle une clé <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericForeignKey\" title=\"django.contrib.contenttypes.fields.GenericForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">GenericForeignKey</code></a> en lui passant les noms des deux champs décrits ci-dessus. Si ces champs sont nommés « content_type » et « object_id », vous pouvez les omettre, car ce sont les noms de champs par défaut que <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericForeignKey\" title=\"django.contrib.contenttypes.fields.GenericForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">GenericForeignKey</code></a> va chercher.</p></li>\n</ol>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.fields.GenericForeignKey.for_concrete_model\">\n<span class=\"sig-name descname\">for_concrete_model</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.fields.GenericForeignKey.for_concrete_model\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Si cet attribut vaut <code class=\"docutils literal notranslate\">False</code>, le champ sera en mesure de référencer des modèles mandataires. La valeur par défaut est <code class=\"docutils literal notranslate\">True</code>. Cela fait écho au paramètre <code class=\"docutils literal notranslate\">for_concrete_model</code> de <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentTypeManager.get_for_model\" title=\"django.contrib.contenttypes.models.ContentTypeManager.get_for_model\"><code class=\"xref py py-meth docutils literal notranslate\">get_for_model()</code></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n<aside class=\"admonition-primary-key-type-compatibility admonition\" role=\"note\">\n<p class=\"admonition-title\">Compatibilité de type de clé primaire</p>\n<p>Le champ <code class=\"docutils literal notranslate\">object_id</code> n’a pas besoin d’être du même type que les champs de clé primaire des modèles connexes, mais leurs valeurs de clé primaire doivent pouvoir être transformées dans le même type que le champ <code class=\"docutils literal notranslate\">object_id</code> par leur méthode <a class=\"reference internal\" href=\"/fr/1.9/ref/models/fields/#django.db.models.Field.get_db_prep_value\" title=\"django.db.models.Field.get_db_prep_value\"><code class=\"xref py py-meth docutils literal notranslate\">get_db_prep_value()</code></a>.</p>\n<p>Par exemple, si vous souhaitez autoriser les relations génériques de modèles avec des champs de clé primaire <a class=\"reference internal\" href=\"/fr/1.9/ref/models/fields/#django.db.models.IntegerField\" title=\"django.db.models.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\">IntegerField</code></a> ou <a class=\"reference internal\" href=\"/fr/1.9/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>, vous pouvez utiliser <a class=\"reference internal\" href=\"/fr/1.9/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a> comme type de champ <code class=\"docutils literal notranslate\">object_id</code> du modèle puisque les nombres entiers peuvent être forcés vers des chaînes de caractères par <a class=\"reference internal\" href=\"/fr/1.9/ref/models/fields/#django.db.models.Field.get_db_prep_value\" title=\"django.db.models.Field.get_db_prep_value\"><code class=\"xref py py-meth docutils literal notranslate\">get_db_prep_value()</code></a>.</p>\n<p>Pour une flexibilité maximale, vous pouvez utiliser un champ <a class=\"reference internal\" href=\"/fr/1.9/ref/models/fields/#django.db.models.TextField\" title=\"django.db.models.TextField\"><code class=\"xref py py-class docutils literal notranslate\">TextField</code></a> qui n’a pas de longueur maximale définie, mais cela pourrait entraîner des pénalités de performances significatives en fonction du moteur de base de données.</p>\n<p>Il n’y a pas de solution passe-partout concernant le meilleur type de champ. Vous devez évaluer les modèles que vous prévoyez de lier et déterminer quelle solution sera la plus efficace pour votre cas d’utilisation.</p>\n</aside>\n<aside class=\"admonition-serializing-references-to-contenttype-objects admonition\" role=\"note\">\n<p class=\"admonition-title\">Sérialisation des références aux objets <code class=\"docutils literal notranslate\">ContentType</code></p>\n<p>Si vous sérialisez des données (par exemple, lors de la génération de <a class=\"reference internal\" href=\"/fr/1.9/topics/testing/tools/#django.test.TransactionTestCase.fixtures\" title=\"django.test.TransactionTestCase.fixtures\"><code class=\"xref py py-class docutils literal notranslate\">fixtures</code></a>) à partir d’un modèle qui met en œuvre les relations génériques, vous devriez probablement utiliser une clé naturelle pour identifier de manière unique les objets <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> associés. Voir <a class=\"reference internal\" href=\"/fr/1.9/topics/serialization/#topics-serialization-natural-keys\"><span class=\"std std-ref\">clés naturelles</span></a> et <a class=\"reference internal\" href=\"/fr/1.9/ref/django-admin/#cmdoption-dumpdata-natural-foreign\"><code class=\"xref std std-option docutils literal notranslate\">dumpdata --natural-foreign</code></a> pour plus d’informations.</p>\n</aside>\n<p>Cela activera une API similaire à celle utilisée pour une clé <a class=\"reference internal\" href=\"/fr/1.9/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a> normale ; chaque <code class=\"docutils literal notranslate\">TaggedItem</code> aura un champ <code class=\"docutils literal notranslate\">content_object</code> qui renvoie l’objet auquel il est lié, et vous pouvez également attribuer une valeur à ce champ ou l’utiliser lors de la création d’un <code class=\"docutils literal notranslate\">TaggedItem</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code 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>guido <span class=\"o\">=</span> User<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>username<span class=\"o\">=</span><span class=\"s1\">&#39;Guido&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t <span class=\"o\">=</span> TaggedItem<span class=\"p\">(</span>content_object<span class=\"o\">=</span>guido<span class=\"p\">,</span> tag<span class=\"o\">=</span><span class=\"s1\">&#39;bdfl&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t<span class=\"o\">.</span>content_object\n<span class=\"go\">&lt;User: Guido&gt;</span>\n</code></pre></div>\n<p>En raison de la façon dont <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericForeignKey\" title=\"django.contrib.contenttypes.fields.GenericForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">GenericForeignKey</code></a> est implémentée, vous ne pouvez pas utiliser ces champs directement avec les filtres (<code class=\"docutils literal notranslate\">filter()</code> et <code class=\"docutils literal notranslate\">exclude()</code>, par exemple) par l’intermédiaire de l’API de base de données. Comme une clé <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericForeignKey\" title=\"django.contrib.contenttypes.fields.GenericForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">GenericForeignKey</code></a> n’est pas un objet de champ normal, ces exemples ne fonctionneront <em>pas</em> :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"c1\"># This will fail</span>\n<span class=\"o\">&gt;&gt;&gt;</span> TaggedItem<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>content_object<span class=\"o\">=</span>guido<span class=\"p\">)</span>\n<span class=\"c1\"># This will also fail</span>\n<span class=\"o\">&gt;&gt;&gt;</span> TaggedItem<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>content_object<span class=\"o\">=</span>guido<span class=\"p\">)</span>\n</code></pre></div>\n<p>De même, les clés <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericForeignKey\" title=\"django.contrib.contenttypes.fields.GenericForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">GenericForeignKey</code></a> n’apparaissent pas dans les formulaires <a class=\"reference internal\" href=\"/fr/1.9/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\">ModelForm</code></a>.</p>\n<section id=\"reverse-generic-relations\">\n<h3>Relations génériques inverses<a class=\"heading-anchor\" href=\"#reverse-generic-relations\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.fields.GenericRelation\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">GenericRelation</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.fields.GenericRelation\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.fields.GenericRelation.related_query_name\">\n<span class=\"sig-name descname\">related_query_name</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.fields.GenericRelation.related_query_name\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>La relation de l’objet lié vers cet objet n’existe pas par défaut. En définissant <code class=\"docutils literal notranslate\">related_query_name</code>, la relation est créée de l’objet lié vers celui-ci. Cela permet d’interroger et de filtrer à partir de l’objet lié.</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>Si vous savez quels seront les modèles que vous utiliserez le plus souvent, vous pouvez également ajouter une relation générique « inverse » pour activer une API supplémentaire. Par exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"kn\">import</span> GenericRelation\n\n<span class=\"k\">class</span> <span class=\"nc\">Bookmark</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    url <span class=\"o\">=</span> models<span class=\"o\">.</span>URLField<span class=\"p\">()</span>\n    tags <span class=\"o\">=</span> GenericRelation<span class=\"p\">(</span>TaggedItem<span class=\"p\">)</span>\n</code></pre></div>\n<p>Les instances <code class=\"docutils literal notranslate\">Bookmark</code> auront chacune un attribut <code class=\"docutils literal notranslate\">tags</code>, qui peut être utilisé pour récupérer leurs objets <code class=\"docutils literal notranslate\">TaggedItems</code> associés :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>b <span class=\"o\">=</span> Bookmark<span class=\"p\">(</span>url<span class=\"o\">=</span><span class=\"s1\">&#39;https://www.djangoproject.com/&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t1 <span class=\"o\">=</span> TaggedItem<span class=\"p\">(</span>content_object<span class=\"o\">=</span>b<span class=\"p\">,</span> tag<span class=\"o\">=</span><span class=\"s1\">&#39;django&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t1<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t2 <span class=\"o\">=</span> TaggedItem<span class=\"p\">(</span>content_object<span class=\"o\">=</span>b<span class=\"p\">,</span> tag<span class=\"o\">=</span><span class=\"s1\">&#39;python&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t2<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b<span class=\"o\">.</span>tags<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">[&lt;TaggedItem: django&gt;, &lt;TaggedItem: python&gt;]</span>\n</code></pre></div>\n<p>En définissant l’attribut <code class=\"docutils literal notranslate\">related_query_name</code> de <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericRelation\" title=\"django.contrib.contenttypes.fields.GenericRelation\"><code class=\"xref py py-class docutils literal notranslate\">GenericRelation</code></a>, cela permet d’interroger à partir de l’objet lié :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code>tags <span class=\"o\">=</span> GenericRelation<span class=\"p\">(</span>TaggedItem<span class=\"p\">,</span> related_query_name<span class=\"o\">=</span><span class=\"s1\">&#39;bookmarks&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Cela permet de filtrer, trier ou d’autres opérations d’interrogation sur <code class=\"docutils literal notranslate\">Bookmark</code> à partir de <code class=\"docutils literal notranslate\">TaggedItem</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get all tags belonging to bookmarks containing `django` in the url</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>TaggedItem<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>bookmarks__url__contains<span class=\"o\">=</span><span class=\"s1\">&#39;django&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">[&lt;TaggedItem: django&gt;, &lt;TaggedItem: python&gt;]</span>\n</code></pre></div>\n<p>Bien sûr, si vous n’ajoutez pas la relation inverse, vous pouvez faire les mêmes types de recherches manuellement :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>b <span class=\"o\">=</span> Bookmark<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>url<span class=\"o\">=</span><span class=\"s1\">&#39;https://www.djangoproject.com/&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>bookmark_type <span class=\"o\">=</span> ContentType<span class=\"o\">.</span>objects<span class=\"o\">.</span>get_for_model<span class=\"p\">(</span>b<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>TaggedItem<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>content_type__pk<span class=\"o\">=</span>bookmark_type<span class=\"o\">.</span>id<span class=\"p\">,</span> object_id<span class=\"o\">=</span>b<span class=\"o\">.</span>id<span class=\"p\">)</span>\n<span class=\"go\">[&lt;TaggedItem: django&gt;, &lt;TaggedItem: python&gt;]</span>\n</code></pre></div>\n<p>Tout comme <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericForeignKey\" title=\"django.contrib.contenttypes.fields.GenericForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">GenericForeignKey</code></a> accepte les noms des champs type de contenu et identifiant d’object en paramètres, il en va de même pour <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericRelation\" title=\"django.contrib.contenttypes.fields.GenericRelation\"><code class=\"xref py py-class docutils literal notranslate\">GenericRelation</code></a>; si le modèle qui a la clé étrangère générique n’utilise pas des noms par défaut pour ces champs, vous devez lui passer les noms des champs lors de la création d’une relation <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericRelation\" title=\"django.contrib.contenttypes.fields.GenericRelation\"><code class=\"xref py py-class docutils literal notranslate\">GenericRelation</code></a>. Par exemple, si le modèle <code class=\"docutils literal notranslate\">TaggedItem</code> mentionné ci-dessus utilisait des champs nommés <code class=\"docutils literal notranslate\">content_type_fk</code> et <code class=\"docutils literal notranslate\">object_primary_key</code> pour créer sa clé étrangère générique, alors une relation <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericRelation\" title=\"django.contrib.contenttypes.fields.GenericRelation\"><code class=\"xref py py-class docutils literal notranslate\">GenericRelation</code></a> inverse devrait être définie comme suit :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code>tags <span class=\"o\">=</span> GenericRelation<span class=\"p\">(</span>\n    TaggedItem<span class=\"p\">,</span>\n    content_type_field<span class=\"o\">=</span><span class=\"s1\">&#39;content_type_fk&#39;</span><span class=\"p\">,</span>\n    object_id_field<span class=\"o\">=</span><span class=\"s1\">&#39;object_primary_key&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Notez également que si vous supprimez un objet qui possède une relation <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericRelation\" title=\"django.contrib.contenttypes.fields.GenericRelation\"><code class=\"xref py py-class docutils literal notranslate\">GenericRelation</code></a>, tous les objets qui ont une clé <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericForeignKey\" title=\"django.contrib.contenttypes.fields.GenericForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">GenericForeignKey</code></a> pointant vers lui seront aussi supprimés. Dans l’exemple ci-dessus, cela signifie que si un objet <code class=\"docutils literal notranslate\">Bookmark</code> a été supprimé, tous les objets <code class=\"docutils literal notranslate\">TaggedItem</code> pointant dessus seront supprimés en même temps.</p>\n<p>Contrairement à <a class=\"reference internal\" href=\"/fr/1.9/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>, <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericForeignKey\" title=\"django.contrib.contenttypes.fields.GenericForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">GenericForeignKey</code></a> n’accepte pas de paramètre <a class=\"reference internal\" href=\"/fr/1.9/ref/models/fields/#django.db.models.ForeignKey.on_delete\" title=\"django.db.models.ForeignKey.on_delete\"><code class=\"xref py py-attr docutils literal notranslate\">on_delete</code></a> pour personnaliser ce comportement ; si vous le souhaitez, vous pouvez éviter la cascade de suppression en évitant simplement de définir une relation <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericRelation\" title=\"django.contrib.contenttypes.fields.GenericRelation\"><code class=\"xref py py-class docutils literal notranslate\">GenericRelation</code></a> ; un comportement différent peut être fourni par le signal <a class=\"reference internal\" href=\"/fr/1.9/ref/signals/#django.db.models.signals.pre_delete\" title=\"django.db.models.signals.pre_delete\"><code class=\"xref py py-data docutils literal notranslate\">pre_delete</code></a>.</p>\n</section>\n<section id=\"generic-relations-and-aggregation\">\n<h3>Relations génériques et agrégation<a class=\"heading-anchor\" href=\"#generic-relations-and-aggregation\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>L”<a class=\"reference internal\" href=\"/fr/1.9/topics/db/aggregation/\"><span class=\"doc\">API d’agrégation de base de données de Django</span></a> fonctionne avec les relations <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericRelation\" title=\"django.contrib.contenttypes.fields.GenericRelation\"><code class=\"xref py py-class docutils literal notranslate\">GenericRelation</code></a>. Par exemple, vous pouvez savoir combien de « tags » sont définis pour tous les signets :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>Bookmark<span class=\"o\">.</span>objects<span class=\"o\">.</span>aggregate<span class=\"p\">(</span>Count<span class=\"p\">(</span><span class=\"s1\">&#39;tags&#39;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;tags__count&#39;: 3}</span>\n</code></pre></div>\n</section>\n<section id=\"generic-relation-in-forms\">\n<span id=\"module-django.contrib.contenttypes.forms\"></span><h3>Relations génériques dans les formulaires<a class=\"heading-anchor\" href=\"#generic-relation-in-forms\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Le module <a class=\"reference internal\" href=\"#module-django.contrib.contenttypes.forms\" title=\"django.contrib.contenttypes.forms\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.contenttypes.forms</code></a> fournit :</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"#django.contrib.contenttypes.forms.BaseGenericInlineFormSet\" title=\"django.contrib.contenttypes.forms.BaseGenericInlineFormSet\"><code class=\"xref py py-class docutils literal notranslate\">BaseGenericInlineFormSet</code></a></p></li>\n<li><p>Une fabrique de groupe de formulaires, <a class=\"reference internal\" href=\"#django.contrib.contenttypes.forms.generic_inlineformset_factory\" title=\"django.contrib.contenttypes.forms.generic_inlineformset_factory\"><code class=\"xref py py-func docutils literal notranslate\">generic_inlineformset_factory()</code></a>, pour être utilisée avec <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericForeignKey\" title=\"django.contrib.contenttypes.fields.GenericForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">GenericForeignKey</code></a>.</p></li>\n</ul>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.forms.BaseGenericInlineFormSet\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">BaseGenericInlineFormSet</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.forms.BaseGenericInlineFormSet\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.forms.generic_inlineformset_factory\">\n<span class=\"sig-name descname\">generic_inlineformset_factory</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model</em>, <em class=\"sig-param\">form<span class=\"o\">=</span><span class=\"default_value\">ModelForm</span></em>, <em class=\"sig-param\">formset<span class=\"o\">=</span><span class=\"default_value\">BaseGenericInlineFormSet</span></em>, <em class=\"sig-param\">ct_field<span class=\"o\">=</span><span class=\"default_value\">'content_type'</span></em>, <em class=\"sig-param\">fk_field<span class=\"o\">=</span><span class=\"default_value\">'object_id'</span></em>, <em class=\"sig-param\">fields<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">exclude<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">extra<span class=\"o\">=</span><span class=\"default_value\">3</span></em>, <em class=\"sig-param\">can_order<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">can_delete<span class=\"o\">=</span><span class=\"default_value\">True</span></em>, <em class=\"sig-param\">max_num<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">formfield_callback<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">validate_max<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">for_concrete_model<span class=\"o\">=</span><span class=\"default_value\">True</span></em>, <em class=\"sig-param\">min_num<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">validate_min<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.forms.generic_inlineformset_factory\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie un <code class=\"docutils literal notranslate\">GenericInlineFormSet</code> à l’aide de <a class=\"reference internal\" href=\"/fr/1.9/ref/forms/models/#django.forms.models.modelformset_factory\" title=\"django.forms.models.modelformset_factory\"><code class=\"xref py py-func docutils literal notranslate\">modelformset_factory()</code></a>.</p>\n<p>Vous devez fournir <code class=\"docutils literal notranslate\">ct_field</code> et <code class=\"docutils literal notranslate\">fk_field</code> s’ils sont différents des valeurs par défaut, respectivement <code class=\"docutils literal notranslate\">content_type</code> et <code class=\"docutils literal notranslate\">object_id</code>. Les autres paramètres sont similaires à ceux documentés dans <a class=\"reference internal\" href=\"/fr/1.9/ref/forms/models/#django.forms.models.modelformset_factory\" title=\"django.forms.models.modelformset_factory\"><code class=\"xref py py-func docutils literal notranslate\">modelformset_factory()</code></a> et <a class=\"reference internal\" href=\"/fr/1.9/ref/forms/models/#django.forms.models.inlineformset_factory\" title=\"django.forms.models.inlineformset_factory\"><code class=\"xref py py-func docutils literal notranslate\">inlineformset_factory()</code></a>.</p>\n<p>Le paramètre <code class=\"docutils literal notranslate\">for_concrete_model</code> correspond au paramètre <a class=\"reference internal\" href=\"#django.contrib.contenttypes.fields.GenericForeignKey.for_concrete_model\" title=\"django.contrib.contenttypes.fields.GenericForeignKey.for_concrete_model\"><code class=\"xref py py-class docutils literal notranslate\">for_concrete_model</code></a>  de <code class=\"docutils literal notranslate\">GenericForeignKey</code>.</p>\n</dd></dl>\n\n</section>\n<section id=\"generic-relations-in-admin\">\n<span id=\"module-django.contrib.contenttypes.admin\"></span><h3>Relations génériques dans l’interface d’administration<a class=\"heading-anchor\" href=\"#generic-relations-in-admin\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Le module <a class=\"reference internal\" href=\"#module-django.contrib.contenttypes.admin\" title=\"django.contrib.contenttypes.admin\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.contenttypes.admin</code></a> fournit <a class=\"reference internal\" href=\"#django.contrib.contenttypes.admin.GenericTabularInline\" title=\"django.contrib.contenttypes.admin.GenericTabularInline\"><code class=\"xref py py-class docutils literal notranslate\">GenericTabularInline</code></a> et <a class=\"reference internal\" href=\"#django.contrib.contenttypes.admin.GenericStackedInline\" title=\"django.contrib.contenttypes.admin.GenericStackedInline\"><code class=\"xref py py-class docutils literal notranslate\">GenericStackedInline</code></a> (sous-classes de <a class=\"reference internal\" href=\"#django.contrib.contenttypes.admin.GenericInlineModelAdmin\" title=\"django.contrib.contenttypes.admin.GenericInlineModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">GenericInlineModelAdmin</code></a>)</p>\n<p>Ces classes et fonctions permettent l’utilisation de relations génériques dans les formulaires et l’interface d’administration. Voir la documentation sur les <a class=\"reference internal\" href=\"/fr/1.9/topics/forms/modelforms/\"><span class=\"doc\">formulaires groupés de modèle</span></a> et <a class=\"reference internal\" href=\"/fr/1.9/ref/contrib/admin/#using-generic-relations-as-an-inline\"><span class=\"std std-ref\">l’interface d’administration</span></a> pour plus d’informations.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.admin.GenericInlineModelAdmin\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">GenericInlineModelAdmin</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.admin.GenericInlineModelAdmin\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>La classe <a class=\"reference internal\" href=\"#django.contrib.contenttypes.admin.GenericInlineModelAdmin\" title=\"django.contrib.contenttypes.admin.GenericInlineModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">GenericInlineModelAdmin</code></a> hérite de toutes les propriétés d’une classe <a class=\"reference internal\" href=\"/fr/1.9/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin\" title=\"django.contrib.admin.InlineModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">InlineModelAdmin</code></a>. Cependant, elle en ajoute quelques autres de son cru pour travailler avec la relation générique :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.admin.GenericInlineModelAdmin.ct_field\">\n<span class=\"sig-name descname\">ct_field</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.admin.GenericInlineModelAdmin.ct_field\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le nom du champ de clé étrangère <a class=\"reference internal\" href=\"#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> sur le modèle. Par défaut, <code class=\"docutils literal notranslate\">content_type</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.admin.GenericInlineModelAdmin.ct_fk_field\">\n<span class=\"sig-name descname\">ct_fk_field</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.admin.GenericInlineModelAdmin.ct_fk_field\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le nom du champ nombre entier qui représente l’identifiant de l’objet associé. Par défaut, <code class=\"docutils literal notranslate\">object_id</code>.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.admin.GenericTabularInline\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">GenericTabularInline</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.admin.GenericTabularInline\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.contenttypes.admin.GenericStackedInline\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">GenericStackedInline</span><a class=\"heading-anchor\" href=\"#django.contrib.contenttypes.admin.GenericStackedInline\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Les sous-classes de <a class=\"reference internal\" href=\"#django.contrib.contenttypes.admin.GenericInlineModelAdmin\" title=\"django.contrib.contenttypes.admin.GenericInlineModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">GenericInlineModelAdmin</code></a> avec mises en page empilées et tabulaires, respectivement.</p>\n</dd></dl>\n\n</section>\n</section>","rootId":"module-django.contrib.contenttypes","toc":[{"title":"Aperçu","anchor":"overview","children":[]},{"title":"Installation du système contenttypes","anchor":"installing-the-contenttypes-framework","children":[]},{"title":"Le modèle ContentType","anchor":"the-contenttype-model","children":[]},{"title":"Méthodes des instances ContentType","anchor":"methods-on-contenttype-instances","children":[{"title":"Le gestionnaire ContentTypeManager","anchor":"the-contenttypemanager","children":[]}]},{"title":"Relations génériques","anchor":"generic-relations","children":[{"title":"Relations génériques inverses","anchor":"reverse-generic-relations","children":[]},{"title":"Relations génériques et agrégation","anchor":"generic-relations-and-aggregation","children":[]},{"title":"Relations génériques dans les formulaires","anchor":"generic-relation-in-forms","children":[]},{"title":"Relations génériques dans l’interface d’administration","anchor":"generic-relations-in-admin","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/1.9/ref/"},{"docname":"ref/contrib/index","title":"Paquets contrib","url":"/fr/1.9/ref/contrib/"}],"prev":{"docname":"ref/contrib/auth","title":"django.contrib.auth","url":"/fr/1.9/ref/contrib/auth/"},"next":{"docname":"ref/contrib/flatpages","title":"L’application flatpages (pages statiques)","url":"/fr/1.9/ref/contrib/flatpages/"},"formats":{"html":"/fr/1.9/ref/contrib/contenttypes/","markdown":"/fr/1.9/ref/contrib/contenttypes.md","json":"/fr/1.9/ref/contrib/contenttypes.json"},"source":"https://github.com/django/django/blob/stable/1.9.x/docs/ref/contrib/contenttypes.txt","official":"https://docs.djangoproject.com/fr/1.9/ref/contrib/contenttypes/","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","fr","ja","id","pt-br","es"]}