{"title":"Signaux","version":"4.0","locale":"fr","docname":"ref/signals","url":"/fr/4.0/ref/signals/","canonical":"https://djangodocs.dev/fr/4.0/ref/signals/","summary":"Une liste de tous les signaux envoyés par Django. Tous les signaux intégrés sont envoyés par la méthode send() . Voir aussi Consultez la documentation sur la…","html":"<h1>Signaux<a class=\"heading-anchor\" href=\"#signals\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Une liste de tous les signaux envoyés par Django. Tous les signaux intégrés sont envoyés par la méthode <a class=\"reference internal\" href=\"/fr/4.0/topics/signals/#django.dispatch.Signal.send\" title=\"django.dispatch.Signal.send\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">send()</span></code></a>.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Voir aussi</p>\n<p>Consultez la documentation sur la <a class=\"reference internal\" href=\"/fr/4.0/topics/signals/\"><span class=\"doc\">distribution de signaux</span></a> pour plus d’informations sur la façon d’inscrire et de recevoir des signaux.</p>\n<p>Le <a class=\"reference internal\" href=\"/fr/4.0/topics/auth/\"><span class=\"doc\">système d’authentification</span></a> envoie des <a class=\"reference internal\" href=\"/fr/4.0/ref/contrib/auth/#topics-auth-signals\"><span class=\"std std-ref\">signaux lorsqu’un utilisateur se connecte ou se déconnecte</span></a>.</p>\n</aside>\n<section id=\"module-django.db.models.signals\">\n<span id=\"model-signals\"></span><h2>Signaux de modèle<a class=\"heading-anchor\" href=\"#module-django.db.models.signals\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Le module <a class=\"reference internal\" href=\"#module-django.db.models.signals\" title=\"django.db.models.signals: Signals sent by the model system.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.db.models.signals</span></code></a> définit un ensemble de signaux envoyés par le système des modèles.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>Beaucoup de ces signaux sont envoyés par différentes méthodes de modèle comme <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code> ou <a class=\"reference internal\" href=\"/fr/4.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>. Ces méthodes peuvent être surchargées dans votre propre code.</p>\n<p>Si vous surchargez ces méthodes dans un de vos modèles, vous devez appeler la méthode de la classe parente si vous voulez que les signaux soient envoyés.</p>\n<p>Notez également que Django stocke les gestionnaires de signaux comme référence faible par défaut. Cela signifie que si le récepteur est une fonction locale, il peut être purgé de la mémoire. Pour empêcher cela, indiquez <code class=\"docutils literal notranslate\"><span class=\"pre\">weak=False</span></code> lors de l’appel à la méthode <a class=\"reference internal\" href=\"/fr/4.0/topics/signals/#django.dispatch.Signal.connect\" title=\"django.dispatch.Signal.connect\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">connect()</span></code></a> du signal.</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Le modèle <code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code> des signaux de modèles peut être référencé de manière différée lors de la connexion à un récepteur en indiquant son étiquette d’application complète. Par exemple, un modèle <code class=\"docutils literal notranslate\"><span class=\"pre\">Question</span></code> défini dans l’application <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> peut être référencé en tant que <code class=\"docutils literal notranslate\"><span class=\"pre\">'polls.Question'</span></code>. Ce type de référence peut être bien pratique lorsqu’on est confronté à des dépendances d’importation circulaire ou à des modèles interchangeables.</p>\n</aside>\n<section id=\"pre-init\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">pre_init</span></code><a class=\"heading-anchor\" href=\"#pre-init\"><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.signals.pre_init\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.db.models.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">pre_init</span></span><a class=\"heading-anchor\" href=\"#django.db.models.signals.pre_init\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Lors de chaque instanciation d’un modèle Django, ce signal est envoyé au début de la méthode <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code> du modèle.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>La classe de modèle dont une instance vient d’être créée.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">args</span></code></dt><dd><p>Une liste de paramètres positionnels transmis à <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code></dt><dd><p>Un dictionnaire de paramètres nommés transmis à <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code>.</p>\n</dd>\n</dl>\n<p>Par exemple, le <a class=\"reference internal\" href=\"/fr/4.0/intro/tutorial02/\"><span class=\"doc\">tutoriel</span></a> contient cette ligne :</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=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">Question</span><span class=\"p\">(</span><span class=\"n\">question_text</span><span class=\"o\">=</span><span class=\"s2\">&quot;What&#39;s new?&quot;</span><span class=\"p\">,</span> <span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span>\n</code></pre></div>\n<p>Les paramètres envoyés au gestionnaire <a class=\"reference internal\" href=\"#django.db.models.signals.pre_init\" title=\"django.db.models.signals.pre_init\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">pre_init</span></code></a> sont :</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Paramètre</p></th>\n<th class=\"head\"><p>Valeur</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Question</span></code> (la classe elle-même)</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">args</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">[]</span></code> (une liste vide, car aucun paramètre positionnel n’a été transmis à <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code>)</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{'question_text':</span> <span class=\"pre\">&quot;What's</span> <span class=\"pre\">new?&quot;,</span></code>\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'pub_date':</span> <span class=\"pre\">datetime.datetime(2012,</span> <span class=\"pre\">2,</span> <span class=\"pre\">26,</span> <span class=\"pre\">13,</span> <span class=\"pre\">0,</span> <span class=\"pre\">0,</span> <span class=\"pre\">775217,</span> <span class=\"pre\">tzinfo=&lt;UTC&gt;)}</span></code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</section>\n<section id=\"post-init\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">post_init</span></code><a class=\"heading-anchor\" href=\"#post-init\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.signals.post_init\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.db.models.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">post_init</span></span><a class=\"heading-anchor\" href=\"#django.db.models.signals.post_init\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Comme <code class=\"docutils literal notranslate\"><span class=\"pre\">pre_init</span></code>, mais celui-ci est envoyé lorsque la méthode <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code> se termine.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>Comme ci-dessus : la classe de modèle dont une instance vient d’être créée.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code></dt><dd><p>L’instance de modèle réelle qui vient d’être créée.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p><a class=\"reference internal\" href=\"/fr/4.0/ref/models/instances/#django.db.models.Model._state\" title=\"django.db.models.Model._state\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">instance._state</span></code></a> n’est pas défini avant l’envoi du signal <code class=\"docutils literal notranslate\"><span class=\"pre\">post_init</span></code>, ce qui fait que les attributs <code class=\"docutils literal notranslate\"><span class=\"pre\">_state</span></code> ont toujours leurs valeurs par défaut. Par exemple, <code class=\"docutils literal notranslate\"><span class=\"pre\">_state.db</span></code> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p>\n</aside>\n</dd>\n</dl>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>Pour des raisons de performance, vous ne devriez pas exécuter de requête dans les récepteurs des signaux <code class=\"docutils literal notranslate\"><span class=\"pre\">pre_init</span></code> ou <code class=\"docutils literal notranslate\"><span class=\"pre\">post_init</span></code> parce qu’elles seraient exécutées pour chaque instance renvoyée durant une itération d’un jeu de requête.</p>\n</aside>\n</section>\n<section id=\"pre-save\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">pre_save</span></code><a class=\"heading-anchor\" href=\"#pre-save\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.signals.pre_save\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.db.models.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">pre_save</span></span><a class=\"heading-anchor\" href=\"#django.db.models.signals.pre_save\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Envoyé au début de la méthode <a class=\"reference internal\" href=\"/fr/4.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> d’un modèle.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>La classe de modèle.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code></dt><dd><p>L’instance réelle en cours d’enregistrement.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">raw</span></code></dt><dd><p>Valeur booléenne ; <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> si le modèle est enregistré exactement comme présenté (par ex. lors du chargement d’un instantané). Il ne faut pas interroger ou modifier d’autres enregistrements de la base de données, car celle-ci pourrait se trouver provisoirement dans un état non cohérent.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></dt><dd><p>L’alias de base de données utilisé.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code></dt><dd><p>Le groupe de champs à mettre à jour tel que transmis à la méthode <a class=\"reference internal\" href=\"/fr/4.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Model.save()</span></code></a>, ou <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> si <code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code> n’a pas été transmis à <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code>.</p>\n</dd>\n</dl>\n</section>\n<section id=\"post-save\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">post_save</span></code><a class=\"heading-anchor\" href=\"#post-save\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.signals.post_save\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.db.models.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">post_save</span></span><a class=\"heading-anchor\" href=\"#django.db.models.signals.post_save\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Comme <a class=\"reference internal\" href=\"#django.db.models.signals.pre_save\" title=\"django.db.models.signals.pre_save\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">pre_save</span></code></a>, mais envoyé à la fin de la méthode <a class=\"reference internal\" href=\"/fr/4.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>La classe de modèle.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code></dt><dd><p>L’instance réelle en cours d’enregistrement.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">created</span></code></dt><dd><p>Valeur booléenne ; <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> si un nouvel enregistrement a été créé.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">raw</span></code></dt><dd><p>Valeur booléenne ; <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> si le modèle est enregistré exactement comme présenté (par ex. lors du chargement d’un instantané). Il ne faut pas interroger ou modifier d’autres enregistrements de la base de données, car celle-ci pourrait se trouver provisoirement dans un état non cohérent.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></dt><dd><p>L’alias de base de données utilisé.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code></dt><dd><p>Le groupe de champs à mettre à jour tel que transmis à la méthode <a class=\"reference internal\" href=\"/fr/4.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Model.save()</span></code></a>, ou <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> si <code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code> n’a pas été transmis à <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code>.</p>\n</dd>\n</dl>\n</section>\n<section id=\"pre-delete\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">pre_delete</span></code><a class=\"heading-anchor\" href=\"#pre-delete\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.signals.pre_delete\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.db.models.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">pre_delete</span></span><a class=\"heading-anchor\" href=\"#django.db.models.signals.pre_delete\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Envoyé au début de la méthode  <a class=\"reference internal\" href=\"/fr/4.0/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a> d’un modèle ou de la méthode <a class=\"reference internal\" href=\"/fr/4.0/ref/models/querysets/#django.db.models.query.QuerySet.delete\" title=\"django.db.models.query.QuerySet.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a> d’un <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>La classe de modèle.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code></dt><dd><p>L’instance réelle en cours de suppression.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></dt><dd><p>L’alias de base de données utilisé.</p>\n</dd>\n</dl>\n</section>\n<section id=\"post-delete\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">post_delete</span></code><a class=\"heading-anchor\" href=\"#post-delete\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.signals.post_delete\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.db.models.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">post_delete</span></span><a class=\"heading-anchor\" href=\"#django.db.models.signals.post_delete\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Comme <a class=\"reference internal\" href=\"#django.db.models.signals.pre_delete\" title=\"django.db.models.signals.pre_delete\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">pre_delete</span></code></a>, mais envoyé à la fin de la méthode <a class=\"reference internal\" href=\"/fr/4.0/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a> d’un modèle ou de la méthode <a class=\"reference internal\" href=\"/fr/4.0/ref/models/querysets/#django.db.models.query.QuerySet.delete\" title=\"django.db.models.query.QuerySet.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a> d’un <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>La classe de modèle.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code></dt><dd><p>L’instance réelle en cours de suppression.</p>\n<p>Notez que l’objet ne se trouve plus dans la base de données, soyez donc très prudent avec ce que vous faites de cette instance.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></dt><dd><p>L’alias de base de données utilisé.</p>\n</dd>\n</dl>\n</section>\n<section id=\"m2m-changed\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">m2m_changed</span></code><a class=\"heading-anchor\" href=\"#m2m-changed\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.signals.m2m_changed\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.db.models.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">m2m_changed</span></span><a class=\"heading-anchor\" href=\"#django.db.models.signals.m2m_changed\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Envoyé lorsqu’un champ <a class=\"reference internal\" href=\"/fr/4.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> est modifié dans une instance de modèle. Strictement parlant, il ne s’agit pas d’un signal de modèle car il est envoyé par <a class=\"reference internal\" href=\"/fr/4.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a>, mais comme il complète les signaux <a class=\"reference internal\" href=\"#django.db.models.signals.pre_save\" title=\"django.db.models.signals.pre_save\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">pre_save</span></code></a>/<a class=\"reference internal\" href=\"#django.db.models.signals.post_save\" title=\"django.db.models.signals.post_save\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">post_save</span></code></a> et <a class=\"reference internal\" href=\"#django.db.models.signals.pre_delete\" title=\"django.db.models.signals.pre_delete\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">pre_delete</span></code></a>/<a class=\"reference internal\" href=\"#django.db.models.signals.post_delete\" title=\"django.db.models.signals.post_delete\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">post_delete</span></code></a> en ce qui concerne le suivi des modifications des modèles, nous l’avons inclus sous cette rubrique.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>La classe de modèles intermédiaire déterminant le champ <a class=\"reference internal\" href=\"/fr/4.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a>. Cette classe est automatiquement créée lors de la définition d’un champ plusieurs-à-plusieurs ; vous pouvez y accéder par l’attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">through</span></code> du champ plusieurs-à-plusieurs.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code></dt><dd><p>L’instance dont la relation plusieurs-à-plusieurs est mise à jour. Cela peut être une instance de <code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code> ou de la classe à laquelle est liée le champ <a class=\"reference internal\" href=\"/fr/4.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">action</span></code></dt><dd><p>Une chaîne indiquant le type de mise à jour effectuée sur la relation. Voici les valeurs possibles :</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;pre_add&quot;</span></code></dt><dd><p>Envoyé <em>avant</em> qu’un ou plusieurs objets soient ajoutés à la relation.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;post_add&quot;</span></code></dt><dd><p>Envoyé <em>après</em> qu’un ou plusieurs objets ont été ajoutés à la relation.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;pre_remove&quot;</span></code></dt><dd><p>Envoyé <em>avant</em> qu’un ou plusieurs objets soient supprimés de la relation.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;post_remove&quot;</span></code></dt><dd><p>Envoyé <em>après</em> qu’un ou plusieurs objets ont été supprimés de la relation.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;pre_clear&quot;</span></code></dt><dd><p>Envoyé <em>avant</em> que la relation soit effacée.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;post_clear&quot;</span></code></dt><dd><p>Envoyé <em>après</em> que la relation a été effacée.</p>\n</dd>\n</dl>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">reverse</span></code></dt><dd><p>Indique quel côté de la relation est mis à jour (c’est-à-dire si c’est la relation directe ou inverse qui est en cours de modification).</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">model</span></code></dt><dd><p>La classe des objets qui sont ajoutés, supprimés ou retirés de la relation.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">pk_set</span></code></dt><dd><p>Pour les actions  <code class=\"docutils literal notranslate\"><span class=\"pre\">pre_add</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">post_add</span></code>, il s’agit d’un ensemble de clés primaires qui seront ou ont été ajoutées à la relation. Il peut s’agir d’un sous-ensemble des valeurs soumises pour l’ajout, car les insertions doivent filtrer les valeurs existantes afin d’éviter les erreurs de base de données <code class=\"docutils literal notranslate\"><span class=\"pre\">IntegrityError</span></code>.</p>\n<p>Pour les actions <code class=\"docutils literal notranslate\"><span class=\"pre\">pre_remove</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">post_remove</span></code>, il s’agit d’un ensemble de clés primaires qui ont été soumises pour la suppression de la relation. Ces valeurs ne dépendent pas du succès ou non de leur réelle suppression. En particulier, des valeurs inexistantes peuvent être soumises et apparaître donc dans <code class=\"docutils literal notranslate\"><span class=\"pre\">pk_set</span></code>, même si elles n’auront aucun effet sur la base de données.</p>\n<p>Pour les signaux <code class=\"docutils literal notranslate\"><span class=\"pre\">pre_clear</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">post_clear</span></code> actions, cette valeur vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></dt><dd><p>L’alias de base de données utilisé.</p>\n</dd>\n</dl>\n<p>Par exemple, si une <code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza</span></code> peut comporter plusieurs objets <code class=\"docutils literal notranslate\"><span class=\"pre\">Topping</span></code>, selon ce modèle :</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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Topping</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">pass</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Pizza</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"n\">toppings</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"n\">Topping</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Si nous connectons un gestionnaire comme 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=\"w\"> </span><span class=\"nn\">django.db.models.signals</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">m2m_changed</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">toppings_changed</span><span class=\"p\">(</span><span class=\"n\">sender</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Do something</span>\n    <span class=\"k\">pass</span>\n\n<span class=\"n\">m2m_changed</span><span class=\"o\">.</span><span class=\"n\">connect</span><span class=\"p\">(</span><span class=\"n\">toppings_changed</span><span class=\"p\">,</span> <span class=\"n\">sender</span><span class=\"o\">=</span><span class=\"n\">Pizza</span><span class=\"o\">.</span><span class=\"n\">toppings</span><span class=\"o\">.</span><span class=\"n\">through</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>puis que nous faisons quelque chose comme ç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=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">Pizza</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">t</span> <span class=\"o\">=</span> <span class=\"n\">Topping</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">toppings</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">t</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>les paramètres envoyés à un gestionnaire <a class=\"reference internal\" href=\"#django.db.models.signals.m2m_changed\" title=\"django.db.models.signals.m2m_changed\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">m2m_changed</span></code></a> (<code class=\"docutils literal notranslate\"><span class=\"pre\">toppings_changed</span></code> dans l’exemple ci-dessus) seraient :</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Paramètre</p></th>\n<th class=\"head\"><p>Valeur</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza.toppings.through</span></code> (la classe plusieurs-à-plusieurs intermédiaire)</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">p</span></code> (l’instance <code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza</span></code> en cours de modification)</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">action</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;pre_add&quot;</span></code> (suivi d’un autre signal avec <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;post_add&quot;</span></code>)</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">reverse</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> (<code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza</span></code> contient le champ <a class=\"reference internal\" href=\"/fr/4.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a>, ce qui fait que cette fonction modifie la relation directe)</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">model</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Topping</span></code> (la classe des objets ajoutés à <code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza</span></code>)</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">pk_set</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{t.id}</span></code> (car seul <code class=\"docutils literal notranslate\"><span class=\"pre\">Topping</span> <span class=\"pre\">t</span></code> a été ajouté à la relation)</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;default&quot;</span></code> (parce que le routeur par défaut dirige les écritures à cette destination)</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>Et si nous faisions ensuite quelque chose comme 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=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">t</span><span class=\"o\">.</span><span class=\"n\">pizza_set</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>les paramètres envoyés à un gestionnaire <a class=\"reference internal\" href=\"#django.db.models.signals.m2m_changed\" title=\"django.db.models.signals.m2m_changed\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">m2m_changed</span></code></a> seraient :</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Paramètre</p></th>\n<th class=\"head\"><p>Valeur</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza.toppings.through</span></code> (la classe plusieurs-à-plusieurs intermédiaire)</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">t</span></code> (l’instance <code class=\"docutils literal notranslate\"><span class=\"pre\">Topping</span></code> en cours de modification)</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">action</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;pre_remove&quot;</span></code> (suivi d’un autre signal avec <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;post_remove&quot;</span></code>)</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">reverse</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> (c’est <code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza</span></code> qui contient le champ <a class=\"reference internal\" href=\"/fr/4.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a>, ce qui fait que cette fonction modifie la relation inverse)</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">model</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza</span></code> (la classe des objets retirés de <code class=\"docutils literal notranslate\"><span class=\"pre\">Topping</span></code>)</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">pk_set</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{p.id}</span></code> (car seul <code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza</span> <span class=\"pre\">p</span></code> a été enlevé de la relation)</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;default&quot;</span></code> (parce que le routeur par défaut dirige les écritures à cette destination)</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</section>\n<section id=\"class-prepared\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">class_prepared</span></code><a class=\"heading-anchor\" href=\"#class-prepared\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.signals.class_prepared\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.db.models.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">class_prepared</span></span><a class=\"heading-anchor\" href=\"#django.db.models.signals.class_prepared\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Envoyé chaque fois qu’une classe de modèle a été « préparée », c’est-à-dire après que le modèle a été défini et inscrit dans le système des modèles de Django. Django utilise ce signal en interne ; il n’est généralement pas utilisé dans des applications tierces.</p>\n<p>Comme ce signal est envoyé durant le processus de remplissage du registre des applications et que <a class=\"reference internal\" href=\"/fr/4.0/ref/applications/#django.apps.AppConfig.ready\" title=\"django.apps.AppConfig.ready\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">AppConfig.ready()</span></code></a> s’exécute après la fin de ce remplissage, les récepteurs ne peuvent pas être connectés dans cette méthode. Une possibilité est de les connecter dans <code class=\"docutils literal notranslate\"><span class=\"pre\">AppConfig.__init__()</span></code> en prenant soi de ne pas importer de modèles ni de déclencher des appels au registre des applications.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>La classe de modèle qui vient d’être préparée.</p>\n</dd>\n</dl>\n</section>\n</section>\n<section id=\"management-signals\">\n<h2>Signaux de gestion<a class=\"heading-anchor\" href=\"#management-signals\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Signaux envoyés par <a class=\"reference internal\" href=\"/fr/4.0/ref/django-admin/\"><span class=\"doc\">django-admin</span></a>.</p>\n<section id=\"pre-migrate\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">pre_migrate</span></code><a class=\"heading-anchor\" href=\"#pre-migrate\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.signals.pre_migrate\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.db.models.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">pre_migrate</span></span><a class=\"heading-anchor\" href=\"#django.db.models.signals.pre_migrate\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Envoyé par la commande <a class=\"reference internal\" href=\"/fr/4.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> afin le début de l’installation d’une application. Il n’est pas émis pour les applications qui n’ont pas de module <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code>.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>Une instance <a class=\"reference internal\" href=\"/fr/4.0/ref/applications/#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> de l’application sur le point d’être migrée/synchronisée.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">app_config</span></code></dt><dd><p>Identique à <code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">verbosity</span></code></dt><dd><p>Indique la quantité d’informations que <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> affiche à l’écran. Voir l’option <a class=\"reference internal\" href=\"/fr/4.0/ref/django-admin/#cmdoption-verbosity\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">--verbosity</span></code></a> pour plus de détails.</p>\n<p>Les fonctions à l’écoute de <a class=\"reference internal\" href=\"#django.db.models.signals.pre_migrate\" title=\"django.db.models.signals.pre_migrate\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">pre_migrate</span></code></a> devraient ajuster ce qu’elles affichent en fonction de la valeur de ce paramètre.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code></dt><dd><p>Si <code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, il est tout à fait possible de demander à l’utilisateur de saisir des informations sur la ligne de commande. Si <code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, les fonctions à l’écoute de ce signal ne doivent pas du tout interroger l’utilisateur.</p>\n<p>Par exemple, l’application <a class=\"reference internal\" href=\"/fr/4.0/topics/auth/#module-django.contrib.auth\" title=\"django.contrib.auth: Django's authentication framework.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code></a> ne demande les informations de création du super-utilisateur que lorsqu”<code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">stdout</span></code></dt><dd><aside class=\"version-note version-added\" data-version=\"4.0\">\n<p class=\"version-note-title\">New in Django 4.0</p></aside>\n<p>Un objet de type flux vers lequel sera redirigée la sortie verbeuse.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></dt><dd><p>L’alias de base de données sur laquelle une commande va agir.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">plan</span></code></dt><dd><p>Le plan de migration qui sera utilisé pour l’exécution des migrations. Même si le plan ne fait pas partie de l’API publique, sa présence sert aux rares cas où il est nécessaire de connaître le plan. Un plan est une liste de tuples binaires avec le premier élément comme instance d’une classe de migration et le second élément indiquant si la migration a été défaite (<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>) ou appliquée (<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>).</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">apps</span></code></dt><dd><p>Une instance de <a class=\"reference internal\" href=\"/fr/4.0/ref/applications/#module-django.apps\" title=\"django.apps\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">Apps</span></code></a> contenant l’état du projet avant l’exécution des migrations. Elle devrait être utilisée en lieu et place du registre global <a class=\"reference internal\" href=\"/fr/4.0/ref/applications/#django.apps.apps\" title=\"django.apps.apps\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">apps</span></code></a> pour récupérer les modèles sur lesquels portent les opérations.</p>\n</dd>\n</dl>\n</section>\n<section id=\"post-migrate\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">post_migrate</span></code><a class=\"heading-anchor\" href=\"#post-migrate\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.signals.post_migrate\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.db.models.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">post_migrate</span></span><a class=\"heading-anchor\" href=\"#django.db.models.signals.post_migrate\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Envoyé à la fin des commandes <a class=\"reference internal\" href=\"/fr/4.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> (même si aucune migration n’est effectuée) et <a class=\"reference internal\" href=\"/fr/4.0/ref/django-admin/#django-admin-flush\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">flush</span></code></a>. Il n’est pas émis pour les applications qui ne possèdent pas de module <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code>.</p>\n<p>Les gestionnaires de ce signal ne doivent pas effectuer de modification de base de données car cela pourrait provoquer l’échec de la commande d’administration <a class=\"reference internal\" href=\"/fr/4.0/ref/django-admin/#django-admin-flush\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">flush</span></code></a> si elle s’exécute pendant la commande <a class=\"reference internal\" href=\"/fr/4.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a>.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>Une instance <a class=\"reference internal\" href=\"/fr/4.0/ref/applications/#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> de l’application qui vient d’être installée.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">app_config</span></code></dt><dd><p>Identique à <code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">verbosity</span></code></dt><dd><p>Indique la quantité d’informations que <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> affiche à l’écran. Voir l’option <a class=\"reference internal\" href=\"/fr/4.0/ref/django-admin/#cmdoption-verbosity\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">--verbosity</span></code></a> pour plus de détails.</p>\n<p>Les fonctions à l’écoute de <a class=\"reference internal\" href=\"#django.db.models.signals.post_migrate\" title=\"django.db.models.signals.post_migrate\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">post_migrate</span></code></a> devraient ajuster ce qu’elles affichent en fonction de la valeur de ce paramètre.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code></dt><dd><p>Si <code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, il est tout à fait possible de demander à l’utilisateur de saisir des informations sur la ligne de commande. Si <code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, les fonctions à l’écoute de ce signal ne doivent pas du tout interroger l’utilisateur.</p>\n<p>Par exemple, l’application <a class=\"reference internal\" href=\"/fr/4.0/topics/auth/#module-django.contrib.auth\" title=\"django.contrib.auth: Django's authentication framework.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code></a> ne demande les informations de création du super-utilisateur que lorsqu”<code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">stdout</span></code></dt><dd><aside class=\"version-note version-added\" data-version=\"4.0\">\n<p class=\"version-note-title\">New in Django 4.0</p></aside>\n<p>Un objet de type flux vers lequel sera redirigée la sortie verbeuse.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></dt><dd><p>L’alias de base de données utilisé pour la synchronisation. La valeur par défaut correspond à la base de données <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">plan</span></code></dt><dd><p>Le plan de migration utilisé pour l’exécution des migrations. Même si le plan ne fait pas partie de l’API publique, sa présence sert aux rares cas où il est nécessaire de connaître le plan. Un plan est une liste de tuples binaires avec le premier élément comme instance d’une classe de migration et le second élément indiquant si la migration a été défaite (<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>) ou appliquée (<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>).</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">apps</span></code></dt><dd><p>Une instance de <a class=\"reference internal\" href=\"/fr/4.0/ref/applications/#django.apps.apps\" title=\"django.apps.apps\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">Apps</span></code></a> contenant l’état du projet après l’exécution des migrations. Elle devrait être utilisée en lieu et place du registre global <a class=\"reference internal\" href=\"/fr/4.0/ref/applications/#django.apps.apps\" title=\"django.apps.apps\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">apps</span></code></a> pour récupérer les modèles sur lesquels portent les opérations.</p>\n</dd>\n</dl>\n<p>Par exemple, il est possible d’inscrire une fonction de rappel dans une classe <a class=\"reference internal\" href=\"/fr/4.0/ref/applications/#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> comme 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=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">AppConfig</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.signals</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">post_migrate</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_callback</span><span class=\"p\">(</span><span class=\"n\">sender</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Your specific logic here</span>\n    <span class=\"k\">pass</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyAppConfig</span><span class=\"p\">(</span><span class=\"n\">AppConfig</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">ready</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">post_migrate</span><span class=\"o\">.</span><span class=\"n\">connect</span><span class=\"p\">(</span><span class=\"n\">my_callback</span><span class=\"p\">,</span> <span class=\"n\">sender</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Si vous fournissez une instance <a class=\"reference internal\" href=\"/fr/4.0/ref/applications/#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> comme paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code>, contrôlez bien que le signal est inscrit dans la méthode <a class=\"reference internal\" href=\"/fr/4.0/ref/applications/#django.apps.AppConfig.ready\" title=\"django.apps.AppConfig.ready\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ready()</span></code></a>. Des instances <code class=\"docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code> sont recréées pour les tests qui fonctionnent avec un réglage <a class=\"reference internal\" href=\"/fr/4.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> modifié (comme quand les réglages sont temporairement surchargés) et de tels signaux doivent alors être connectés pour chaque nouvelle instance de <code class=\"docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code>.</p>\n</aside>\n</section>\n</section>\n<section id=\"module-django.core.signals\">\n<span id=\"request-response-signals\"></span><h2>Signaux de requête et de réponse<a class=\"heading-anchor\" href=\"#module-django.core.signals\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Signaux envoyés par le système de base lors du traitement d’une requête.</p>\n<section id=\"request-started\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">request_started</span></code><a class=\"heading-anchor\" href=\"#request-started\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.core.signals.request_started\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.core.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">request_started</span></span><a class=\"heading-anchor\" href=\"#django.core.signals.request_started\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Envoyé lorsque Django commence à traiter une requête HTTP.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>La classe de gestion – par ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">django.core.handlers.wsgi.WsgiHandler</span></code> – qui est chargée de la requête.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">environ</span></code></dt><dd><p>Le dictionnaire <code class=\"docutils literal notranslate\"><span class=\"pre\">environ</span></code> fourni à la requête.</p>\n</dd>\n</dl>\n</section>\n<section id=\"request-finished\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">request_finished</span></code><a class=\"heading-anchor\" href=\"#request-finished\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.core.signals.request_finished\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.core.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">request_finished</span></span><a class=\"heading-anchor\" href=\"#django.core.signals.request_finished\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Envoyé lorsque Django a terminé l’envoi d’une réponse HTTP à un client.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>La classe de gestion, comme ci-dessus.</p>\n</dd>\n</dl>\n</section>\n<section id=\"got-request-exception\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">got_request_exception</span></code><a class=\"heading-anchor\" href=\"#got-request-exception\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.core.signals.got_request_exception\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.core.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">got_request_exception</span></span><a class=\"heading-anchor\" href=\"#django.core.signals.got_request_exception\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ce signal est envoyé chaque fois que Django rencontre une exception lors du traitement d’une requête HTTP entrante.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>Inutilisé (toujours <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>).</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code></dt><dd><p>L’objet <a class=\"reference internal\" href=\"/fr/4.0/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code></a>.</p>\n</dd>\n</dl>\n</section>\n</section>\n<section id=\"module-django.test.signals\">\n<span id=\"test-signals\"></span><h2>Signaux de test<a class=\"heading-anchor\" href=\"#module-django.test.signals\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ces signaux ne sont envoyés que lors du <a class=\"reference internal\" href=\"/fr/4.0/topics/testing/overview/#running-tests\"><span class=\"std std-ref\">fonctionnement des tests</span></a>.</p>\n<section id=\"setting-changed\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">setting_changed</span></code><a class=\"heading-anchor\" href=\"#setting-changed\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.test.signals.setting_changed\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.test.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">setting_changed</span></span><a class=\"heading-anchor\" href=\"#django.test.signals.setting_changed\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ce signal est envoyé lorsque la valeur d’un réglage a été modifiée par le gestionnaire de contexte <code class=\"docutils literal notranslate\"><span class=\"pre\">django.test.TestCase.settings()</span></code> ou le décorateur/gestionnaire de contexte <a class=\"reference internal\" href=\"/fr/4.0/topics/testing/tools/#django.test.override_settings\" title=\"django.test.override_settings\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.test.override_settings()</span></code></a>.</p>\n<p>En fait, il est envoyé deux fois : lorsque la nouvelle valeur est appliquée (« setup ») et lorsque la valeur originale est restaurée (« teardown »). Utilisez le paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">enter</span></code> pour distinguer entre les deux cas.</p>\n<p>Vous pouvez aussi importer ce signal à partir de <code class=\"docutils literal notranslate\"><span class=\"pre\">django.core.signals</span></code> pour éviter de l’importer à partir de <code class=\"docutils literal notranslate\"><span class=\"pre\">django.test</span></code> dans un contexte ne concernant pas les tests.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>Le gestionnaire des réglages.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">setting</span></code></dt><dd><p>Le nom du réglage.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">valeur</span></code></dt><dd><p>La valeur du réglage après la modification. Pour les réglages qui n’existent initialement pas, durant la phase de « teardown », <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">enter</span></code></dt><dd><p>Une valeur booléenne ; <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> si le réglage doit être appliqué, <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> s’il doit être restauré.</p>\n</dd>\n</dl>\n</section>\n<section id=\"template-rendered\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">template_rendered</span></code><a class=\"heading-anchor\" href=\"#template-rendered\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.test.signals.template_rendered\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.test.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">template_rendered</span></span><a class=\"heading-anchor\" href=\"#django.test.signals.template_rendered\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Envoyé lorsque le système de test produit un gabarit. Ce signal n’est pas émis pendant les opérations normales d’un serveur Django, il n’est disponible que durant les tests.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>L’objet <a class=\"reference internal\" href=\"/fr/4.0/ref/templates/api/#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Template</span></code></a> qui a été produit.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">template</span></code></dt><dd><p>Identique à <code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">context</span></code></dt><dd><p>L’objet <a class=\"reference internal\" href=\"/fr/4.0/ref/templates/api/#django.template.Context\" title=\"django.template.Context\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Context</span></code></a> avec lequel le gabarit a été produit.</p>\n</dd>\n</dl>\n</section>\n</section>\n<section id=\"module-django.db.backends\">\n<span id=\"database-wrappers\"></span><h2>Adaptateurs de base de données<a class=\"heading-anchor\" href=\"#module-django.db.backends\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Signaux envoyés par l’adaptateur de base de données lorsqu’une connexion à la base de données est initiée.</p>\n<section id=\"connection-created\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">connection_created</span></code><a class=\"heading-anchor\" href=\"#connection-created\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.db.backends.signals.connection_created\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.db.backends.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">connection_created</span></span><a class=\"heading-anchor\" href=\"#django.db.backends.signals.connection_created\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Envoyé lorsque l’adaptateur de base de données crée la connexion initiale à la base de données. C’est particulièrement utile si vous avez besoin d’envoyer des commandes post connexion au moteur SQL.</p>\n<p>Paramètres envoyés avec ce signal :</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>La classe d’adaptation de la base de données – c’est-à-dire <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.backends.postgresql.DatabaseWrapper</span></code> ou <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.backends.mysql.DatabaseWrapper</span></code>, etc.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">connection</span></code></dt><dd><p>La connexion de base de données qui a été ouverte. Cela peut être utilisé dans une configuration à plusieurs bases de données pour différencier les signaux de connexion de différentes bases de données.</p>\n</dd>\n</dl>\n</section>\n</section>","rootId":"signals","toc":[{"title":"Signaux de modèle","anchor":"module-django.db.models.signals","children":[{"title":"pre_init","anchor":"pre-init","children":[]},{"title":"post_init","anchor":"post-init","children":[]},{"title":"pre_save","anchor":"pre-save","children":[]},{"title":"post_save","anchor":"post-save","children":[]},{"title":"pre_delete","anchor":"pre-delete","children":[]},{"title":"post_delete","anchor":"post-delete","children":[]},{"title":"m2m_changed","anchor":"m2m-changed","children":[]},{"title":"class_prepared","anchor":"class-prepared","children":[]}]},{"title":"Signaux de gestion","anchor":"management-signals","children":[{"title":"pre_migrate","anchor":"pre-migrate","children":[]},{"title":"post_migrate","anchor":"post-migrate","children":[]}]},{"title":"Signaux de requête et de réponse","anchor":"module-django.core.signals","children":[{"title":"request_started","anchor":"request-started","children":[]},{"title":"request_finished","anchor":"request-finished","children":[]},{"title":"got_request_exception","anchor":"got-request-exception","children":[]}]},{"title":"Signaux de test","anchor":"module-django.test.signals","children":[{"title":"setting_changed","anchor":"setting-changed","children":[]},{"title":"template_rendered","anchor":"template-rendered","children":[]}]},{"title":"Adaptateurs de base de données","anchor":"module-django.db.backends","children":[{"title":"connection_created","anchor":"connection-created","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/4.0/ref/"}],"prev":{"docname":"ref/settings","title":"Réglages","url":"/fr/4.0/ref/settings/"},"next":{"docname":"ref/templates/index","title":"Gabarits","url":"/fr/4.0/ref/templates/"},"formats":{"html":"/fr/4.0/ref/signals/","markdown":"/fr/4.0/ref/signals.md","json":"/fr/4.0/ref/signals.json"},"source":"https://github.com/django/django/blob/stable/4.0.x/docs/ref/signals.txt","official":"https://docs.djangoproject.com/fr/4.0/ref/signals/","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","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}