{"title":"信号","version":"6.0","locale":"zh-hans","docname":"ref/signals","url":"/zh-hans/6.0/ref/signals/","canonical":"https://djangodocs.dev/zh-hans/6.0/ref/signals/","summary":"Django 发送的所有信号的列表。所有内置的信号都是使用 send() 方法发送的。 See also 关于如何注册和接收信号的信息，请参见 信号收发 的文档。 认证框架 在 用户登录／退出时发送信号 。 模型信号 Link to this heading # django.db.models.signals…","html":"<h1>信号<a class=\"heading-anchor\" href=\"#signals\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django 发送的所有信号的列表。所有内置的信号都是使用 <a class=\"reference internal\" href=\"/zh-hans/6.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\">See also</p>\n<p>关于如何注册和接收信号的信息，请参见 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/signals/\"><span class=\"doc\">信号收发</span></a> 的文档。</p>\n<p><a class=\"reference internal\" href=\"/zh-hans/6.0/topics/auth/\"><span class=\"doc\">认证框架</span></a> 在 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/contrib/auth/#topics-auth-signals\"><span class=\"std std-ref\">用户登录／退出时发送信号</span></a>。</p>\n</aside>\n<section id=\"module-django.db.models.signals\">\n<span id=\"model-signals\"></span><h2>模型信号<a class=\"heading-anchor\" href=\"#module-django.db.models.signals\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><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> 模块定义了一组由模型系统发送的信号。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>信号可以使您的代码更难维护。考虑在 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/db/managers/#custom-managers\"><span class=\"std std-ref\">自定义管理器</span></a> 上实现一个辅助方法，既可以更新您的模型又可以执行其他逻辑，或者在使用模型信号之前 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/db/models/#overriding-model-methods\"><span class=\"std std-ref\">覆盖模型方法</span></a>。</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>这些信号中有很多是由各种模型方法发送的，比如 <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code> 或 <a class=\"reference internal\" href=\"/zh-hans/6.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>如果你在模型上重写了这些方法，你必须调用父类的方法才能发送这些信号。</p>\n<p>Note also that Django stores signal handlers as weak references by default,\nso if your handler is a local function, it may be garbage collected. To\nprevent this, pass <code class=\"docutils literal notranslate\"><span class=\"pre\">weak=False</span></code> when you call the signal's\n<a class=\"reference internal\" href=\"/zh-hans/6.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>.</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>模型信号 <code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code> 模型可以在连接接收器时，通过指定其完整的应用程序标签进行惰性引用。例如，在 <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> 应用程序中定义的 <code class=\"docutils literal notranslate\"><span class=\"pre\">Question</span></code> 模型可以被引用为 <code class=\"docutils literal notranslate\"><span class=\"pre\">'polls.Question'</span></code>。在处理循环导入依赖关系和可交换模型时，这种引用可以非常方便。</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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>每当你实例化一个 Django 模型时，这个信号都会在模型的 <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code> 方法的开头发出。</p>\n<p>用此信号发送的参数：</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>刚刚创建了一个实例的模型类。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">args</span></code></dt><dd><p>传递给 <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>传递给 <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code> 的关键字参数字典。</p>\n</dd>\n</dl>\n<p>例如，<a class=\"reference internal\" href=\"/zh-hans/6.0/intro/tutorial02/\"><span class=\"doc\">教程</span></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=\"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>发送给 <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> 处理程序的参数是：</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>参数</p></th>\n<th class=\"head\"><p>值</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> （类本身）</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> （一个空列表，因为没有向 <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=datetime.UTC)}</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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>和 pre_init 一样，但这个是在 <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code> 方法完成后发送的。</p>\n<p>用此信号发送的参数：</p>\n<dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>如上：刚刚创建了一个实例的模型类。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code></dt><dd><p>刚刚创建的模型的实际实例。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p><a class=\"reference internal\" href=\"/zh-hans/6.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> 在发送 <code class=\"docutils literal notranslate\"><span class=\"pre\">post_init</span></code> 信号之前没有设置，所以 <code class=\"docutils literal notranslate\"><span class=\"pre\">_state</span></code> 属性总是有其默认值。例如，<code class=\"docutils literal notranslate\"><span class=\"pre\">_state.db</span></code> 是 <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\">Warning</p>\n<p>出于性能考虑，你不应该在 <code class=\"docutils literal notranslate\"><span class=\"pre\">pre_init</span></code> 或 <code class=\"docutils literal notranslate\"><span class=\"pre\">post_init</span></code> 信号的接收者中执行查询，因为在查询集迭代期间，它们会对每个返回的实例执行。</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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>这是在模型的 <a class=\"reference internal\" href=\"/zh-hans/6.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>用此信号发送的参数：</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>模型类</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code></dt><dd><p>实际被保存的实例。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">raw</span></code></dt><dd><p>一个布尔值；如果模型被保存的方式与原始数据一致（即在加载 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/db/fixtures/#fixtures-explanation\"><span class=\"std std-ref\">fixture</span></a> 时），则为 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>。在这种情况下，不应查询/修改数据库中的其他记录，因为数据库可能尚未处于一致状态。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></dt><dd><p>正在使用的数据库别名。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code></dt><dd><p>传递给 <a class=\"reference internal\" href=\"/zh-hans/6.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> 的要更新的字段集，如果 <code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code> 没有传递给 <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code>，则为 <code class=\"docutils literal notranslate\"><span class=\"pre\">None</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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>就像 <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=\"/zh-hans/6.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>用此信号发送的参数：</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>模型类</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code></dt><dd><p>实际被保存的实例。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">created</span></code></dt><dd><p>一个布尔值；<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> 如果创建了一个新记录。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">raw</span></code></dt><dd><p>一个布尔值；如果模型被保存的方式与原始数据一致（即在加载 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/db/fixtures/#fixtures-explanation\"><span class=\"std std-ref\">fixture</span></a> 时），则为 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>。在这种情况下，不应查询/修改数据库中的其他记录，因为数据库可能尚未处于一致状态。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></dt><dd><p>正在使用的数据库别名。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code></dt><dd><p>传递给 <a class=\"reference internal\" href=\"/zh-hans/6.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> 的要更新的字段集，如果 <code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code> 没有传递给 <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code>，则为 <code class=\"docutils literal notranslate\"><span class=\"pre\">None</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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>在模型的 <code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code> 方法和查询集的 <a class=\"reference internal\" href=\"/zh-hans/6.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> 方法开始时发送。</p>\n<p>用此信号发送的参数：</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>模型类</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code></dt><dd><p>实际被删除的实例。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></dt><dd><p>正在使用的数据库别名。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">origin</span></code></dt><dd><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">Model</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> instance from which the deletion originated,\nthat is, the instance whose <code class=\"docutils literal notranslate\"><span class=\"pre\">delete()</span></code> method was invoked.</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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>就像 <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> 一样，但在模型的 <code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code> 方法和查询集的 <a class=\"reference internal\" href=\"/zh-hans/6.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> 方法结束时发送。</p>\n<p>用此信号发送的参数：</p>\n<dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>模型类</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code></dt><dd><p>实际被删除的实例。</p>\n<p>请注意，该对象将不再在数据库中，所以要非常小心地处理这个实例。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></dt><dd><p>正在使用的数据库别名。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">origin</span></code></dt><dd><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">Model</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> instance from which the deletion originated,\nthat is, the instance whose <code class=\"docutils literal notranslate\"><span class=\"pre\">delete()</span></code> method was invoked.</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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>当一个模型实例上的 <a class=\"reference internal\" href=\"/zh-hans/6.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> 被改变时发出。严格来说，这不是一个模型信号，因为它是由 <a class=\"reference internal\" href=\"/zh-hans/6.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> 发送的，但由于它是对 <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> 和 <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> 的补充，当涉及到跟踪模型的变化时，它被包含在这里。</p>\n<p>用此信号发送的参数：</p>\n<dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>中间模型类描述 <a class=\"reference internal\" href=\"/zh-hans/6.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>。当定义了多对多字段时，这个类会自动创建；你可以使用多对多字段上的 <code class=\"docutils literal notranslate\"><span class=\"pre\">through</span></code> 属性来访问它。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code></dt><dd><p>多对多关系被更新的实例。这可以是 <code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code> 的实例，或者是 <a class=\"reference internal\" href=\"/zh-hans/6.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>表示对关系进行更新的类型的字符串。可以是以下类型之一：</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;pre_add&quot;</span></code></dt><dd><p>在一个或多个对象被添加到关系 <em>之前</em> 发送。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;post_add&quot;</span></code></dt><dd><p>在一个或多个对象被添加到关系 <em>之后</em> 发送。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;pre_remove&quot;</span></code></dt><dd><p>在一个或多个对象从关系中删除 <em>之前</em> 发送。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;post_remove&quot;</span></code></dt><dd><p>在一个或多个对象从关系中删除 <em>之后</em> 发送。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;pre_clear&quot;</span></code></dt><dd><p>在关系被清除 <em>之前</em> 发送。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;post_clear&quot;</span></code></dt><dd><p>在关系被清除 <em>之后</em> 发送。</p>\n</dd>\n</dl>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">reverse</span></code></dt><dd><p>表示关系的哪一面被更新（即被修改的是正向关系还是反向关系）。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">model</span></code></dt><dd><p>从关系中添加、删除或清除的对象的类别。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">pk_set</span></code></dt><dd><p>对于 <code class=\"docutils literal notranslate\"><span class=\"pre\">pre_add</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">post_add</span></code> 动作，这是一组将被或已经被添加到关系中的主键值。这可能是提交添加的值的一个子集，因为插入必须过滤现有的值，以避免数据库 <code class=\"docutils literal notranslate\"><span class=\"pre\">IntegrityError</span></code>。</p>\n<p>对于 <code class=\"docutils literal notranslate\"><span class=\"pre\">pre_remove</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">post_remove</span></code> 动作来说，这是一组被提交从关系中删除的主键值。这并不取决于这些值是否会被实际删除或已经被删除。特别是，不存在的值可能会被提交，并且会出现在 <code class=\"docutils literal notranslate\"><span class=\"pre\">pk_set</span></code> 中，即使它们对数据库没有影响。</p>\n<p>对于 <code class=\"docutils literal notranslate\"><span class=\"pre\">pre_clear</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">post_clear</span></code> 动作，是 <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>正在使用的数据库别名。</p>\n</dd>\n</dl>\n<p>例如，如果一个 <code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza</span></code> 可以有多个 <code class=\"docutils literal notranslate\"><span class=\"pre\">Topping</span></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=\"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\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>如果我们连接一个这样的处理程序：</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\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\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>然后执行了类似以下操作：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"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>发送给 <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>）将是：</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>参数</p></th>\n<th class=\"head\"><p>值</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> （中间的 m2m 类）</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> （被修改的 <code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza</span></code> 实例）</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> （后面是一个单独的信号 <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> 包含 <a class=\"reference internal\" href=\"/zh-hans/6.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></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> （添加到 <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> （因为只有 <code class=\"docutils literal notranslate\"><span class=\"pre\">Topping</span> <span class=\"pre\">t</span></code> 被添加到关系中）</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> （因为默认的路由器在这里发送写入）</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>如果我们接下来做了类似以下的操作：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"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>发送给 <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> 处理程序的参数将是：</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>参数</p></th>\n<th class=\"head\"><p>值</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> （中间的 m2m 类）</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> （正在修改的 <code class=\"docutils literal notranslate\"><span class=\"pre\">Topping</span></code> 实例）</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> （后面是一个单独的信号 <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> （<code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza</span></code> 包含 <a class=\"reference internal\" href=\"/zh-hans/6.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></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> （从 <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> （因为只有 <code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza</span> <span class=\"pre\">p</span></code> 被从关系中删除）</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> （因为默认的路由器在这里发送写入）</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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>每当模型类被 &quot;准备&quot; 时发送，也就是说，一旦模型已经被定义并在 Django 的模型系统中注册。Django 在内部使用这个信号；它通常不在第三方应用程序中使用。</p>\n<p>由于这个信号是在应用注册表填充过程中发出的，而 <a class=\"reference internal\" href=\"/zh-hans/6.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> 是在应用注册表完全填充后运行的，所以不能在该方法中连接接收器。一种可能是用 <code class=\"docutils literal notranslate\"><span class=\"pre\">AppConfig.__init__()</span></code> 来代替连接它们，注意不要导入模型或触发对应用注册表的调用。</p>\n<p>用此信号发送的参数：</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>刚刚准备好的模型类。</p>\n</dd>\n</dl>\n</section>\n</section>\n<section id=\"management-signals\">\n<h2>管理信号<a class=\"heading-anchor\" href=\"#management-signals\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/zh-hans/6.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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>由 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> 命令在开始安装应用程序之前发出。对于缺乏 <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code> 模块的应用程序，它不会发出。</p>\n<p>用此信号发送的参数：</p>\n<dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>一个 <a class=\"reference internal\" href=\"/zh-hans/6.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> 实例，用于即将迁移／同步的应用程序。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">app_config</span></code></dt><dd><p>同 <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>指示 <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> 在屏幕上打印多少信息。有关详细信息，请参阅 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/django-admin/#cmdoption-verbosity\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">--verbosity</span></code></a> 标志。</p>\n<p>监听 <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> 的函数应该根据这个参数的值来调整它们向屏幕输出的内容。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code></dt><dd><p>如果 <code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code> 为 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>，则可以安全地提示用户在命令行上输入东西。如果 <code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code> 为 <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>，则监听该信号的函数不应试图提示任何东西。</p>\n<p>例如 <a class=\"reference internal\" href=\"/zh-hans/6.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> 应用只有在 <code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code> 为 <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><p>一个类似于流的对象，用于重定向详细的输出。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></dt><dd><p>命令将运行的数据库的别名。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">plan</span></code></dt><dd><p>将用于迁移运行的迁移计划。虽然计划不是公共 API，但这允许在必要时了解计划的情况。计划是一个包含 2 元组的列表，第一个项目是迁移类的实例，第二个项目显示迁移是回滚（<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>）还是应用（<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><a class=\"reference internal\" href=\"/zh-hans/6.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> 的实例，包含迁移运行前的项目状态。它应该代替全局 <code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">apps</span></code> 注册表来检索你要执行操作的模型。</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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>在 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> （即使没有运行迁移）和 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/django-admin/#django-admin-flush\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">flush</span></code></a> 命令结束时发出。对于缺乏 <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code> 模块的应用程序，它不会被发出。</p>\n<p>该信号的处理者不能进行数据库模式的改变，因为如果在 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> 命令期间运行 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/django-admin/#django-admin-flush\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">flush</span></code></a> 命令，可能会导致后者失败。</p>\n<p>用此信号发送的参数：</p>\n<dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>一个 <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code> 实例，用于刚刚安装的应用程序。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">app_config</span></code></dt><dd><p>同 <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>指示 <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> 在屏幕上打印多少信息。有关详细信息，请参阅 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/django-admin/#cmdoption-verbosity\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">--verbosity</span></code></a> 标志。</p>\n<p>监听 <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> 的函数应该根据这个参数的值来调整它们向屏幕输出的内容。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code></dt><dd><p>如果 <code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code> 为 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>，则可以安全地提示用户在命令行上输入东西。如果 <code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code> 为 <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>，则监听该信号的函数不应试图提示任何东西。</p>\n<p>例如 <a class=\"reference internal\" href=\"/zh-hans/6.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> 应用只有在 <code class=\"docutils literal notranslate\"><span class=\"pre\">interactive</span></code> 为 <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><p>一个类似于流的对象，用于重定向详细的输出。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></dt><dd><p>用于同步的数据库别名。默认为 <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>用于迁移运行的迁移计划。尽管计划不是公共 API，但这允许在必要时了解计划的情况。计划是一个包含 2 元组的列表，第一个项目是迁移类的实例，第二个项目显示迁移是回滚（<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>）还是应用（<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><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">Apps</span></code> 的一个实例，包含迁移运行后项目的状态。它应该代替全局的 <code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">apps</span></code> 注册表来检索你要执行操作的模型。</p>\n</dd>\n</dl>\n<p>例如，你可以在一个 <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></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=\"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\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\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>如果你提供了一个 <a class=\"reference internal\" href=\"/zh-hans/6.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> 实例作为发送者参数，请确保该信号在 <a class=\"reference internal\" href=\"/zh-hans/6.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> 中注册。<code class=\"docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code> 会被重新创建，用于使用修改过的 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 集合运行的测试（例如当配置被覆盖时），并且这种信号应该为每个新的 <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>请求／响应信号<a class=\"heading-anchor\" href=\"#module-django.core.signals\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>核心框架处理请求时发出的信号。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>信号可能会使您的代码更难维护。在使用请求/响应信号之前，考虑 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/http/middleware/\"><span class=\"doc\">使用中间件</span></a>。</p>\n</aside>\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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>当 Django 开始处理一个 HTTP 请求时发送。</p>\n<p>用此信号发送的参数：</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>处理程序类 —— 例如 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.core.handlers.wsgi.wsgiHandler</span></code> —— 处理该请求。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">environ</span></code></dt><dd><p>向请求提供的 <code class=\"docutils literal notranslate\"><span class=\"pre\">environ</span></code> 字典。</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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>当 Django 完成向客户端发送 HTTP 响应时发送。</p>\n<p>用此信号发送的参数：</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>处理程序类，同上。</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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>当 Django 在处理一个传入的 HTTP 请求时遇到异常时，就会发出这个信号。</p>\n<p>用此信号发送的参数：</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>未使用（总是 <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><a class=\"reference internal\" href=\"/zh-hans/6.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>测试信号<a class=\"heading-anchor\" href=\"#module-django.test.signals\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>只有当 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/testing/overview/#running-tests\"><span class=\"std std-ref\">运行测试</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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>当通过 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.test.TestCase.settings()</span></code> 上下文管理器或 <a class=\"reference internal\" href=\"/zh-hans/6.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>它实际上被发送了两次：当应用新的值时（&quot;setup&quot;）和当恢复原始值时（&quot;drawdown&quot;）。使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">enter</span></code> 参数来区分这两种情况。</p>\n<p>你也可以从 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.core.signals</span></code> 导入这个信号，以避免在非测试情况下从 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.test</span></code> 导入。</p>\n<p>用此信号发送的参数：</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>配置处理程序。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">setting</span></code></dt><dd><p>配置的名称。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code></dt><dd><p>更改后的配置值。对于最初不存在的配置，在 &quot;teardown&quot; 阶段，<code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> 是 <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>一个布尔值；<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> 如果配置被应用，<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> 如果恢复。</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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>当测试系统渲染一个模板时发出。这个信号在 Django 服务器正常运行时不会发出，只有在测试时才会发出。</p>\n<p>用此信号发送的参数：</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>被渲染的 <a class=\"reference internal\" href=\"/zh-hans/6.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> 对象。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">template</span></code></dt><dd><p>与发送器相同</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">context</span></code></dt><dd><p>渲染模板的 <a class=\"reference internal\" href=\"/zh-hans/6.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>。</p>\n</dd>\n</dl>\n</section>\n</section>\n<section id=\"module-django.db.backends\">\n<span id=\"database-wrappers\"></span><h2>数据库包装器<a class=\"heading-anchor\" href=\"#module-django.db.backends\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>当数据库连接启动时，数据库包装器发出的信号。</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\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Sent when the database wrapper makes the initial connection to the\ndatabase. This is particularly useful if you'd like to send any post\nconnection commands to the SQL backend.</p>\n<p>用此信号发送的参数：</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>数据库封装类 —— 即 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.backends.postgresql.DatabaseWrapper</span></code> 或 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.backends.mysql.DatabaseWrapper</span></code> 等。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">connection</span></code></dt><dd><p>打开的数据库连接。这在多数据库配置中可以用来区分不同数据库的连接信号。</p>\n</dd>\n</dl>\n</section>\n</section>\n<section id=\"tasks-signals\">\n<h2>Tasks signals<a class=\"heading-anchor\" href=\"#tasks-signals\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"version-note version-added\" data-version=\"6.0\">\n<p class=\"version-note-title\">New in Django 6.0</p></aside>\n<p>Signals sent by the <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/tasks/\"><span class=\"doc\">tasks</span></a> framework.</p>\n<section id=\"task-enqueued\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">task_enqueued</span></code><a class=\"heading-anchor\" href=\"#task-enqueued\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.signals.task_enqueued\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.tasks.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">task_enqueued</span></span><a class=\"heading-anchor\" href=\"#django.tasks.signals.task_enqueued\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Sent once a Task has been enqueued.</p>\n<p>用此信号发送的参数：</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>The backend class which the Task was enqueued on to.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">task_result</span></code></dt><dd><p>The enqueued <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/tasks/#django.tasks.TaskResult\" title=\"django.tasks.TaskResult\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TaskResult</span></code></a>.</p>\n</dd>\n</dl>\n</section>\n<section id=\"task-started\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">task_started</span></code><a class=\"heading-anchor\" href=\"#task-started\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.signals.task_started\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.tasks.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">task_started</span></span><a class=\"heading-anchor\" href=\"#django.tasks.signals.task_started\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Sent when a Task has started executing.</p>\n<p>用此信号发送的参数：</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>The backend class which the Task was enqueued on to.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">task_result</span></code></dt><dd><p>The started <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/tasks/#django.tasks.TaskResult\" title=\"django.tasks.TaskResult\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TaskResult</span></code></a>.</p>\n</dd>\n</dl>\n</section>\n<section id=\"task-finished\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">task_finished</span></code><a class=\"heading-anchor\" href=\"#task-finished\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.signals.task_finished\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.tasks.signals.</span></span><span class=\"sig-name descname\"><span class=\"pre\">task_finished</span></span><a class=\"heading-anchor\" href=\"#django.tasks.signals.task_finished\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Sent once a Task has finished executing, successfully or otherwise.</p>\n<p>用此信号发送的参数：</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code></dt><dd><p>The backend class which the Task was enqueued on to.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">task_result</span></code></dt><dd><p>The finished <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/tasks/#django.tasks.TaskResult\" title=\"django.tasks.TaskResult\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TaskResult</span></code></a>.</p>\n</dd>\n</dl>\n</section>\n</section>","rootId":"signals","toc":[{"title":"模型信号","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":"管理信号","anchor":"management-signals","children":[{"title":"pre_migrate","anchor":"pre-migrate","children":[]},{"title":"post_migrate","anchor":"post-migrate","children":[]}]},{"title":"请求／响应信号","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":"测试信号","anchor":"module-django.test.signals","children":[{"title":"setting_changed","anchor":"setting-changed","children":[]},{"title":"template_rendered","anchor":"template-rendered","children":[]}]},{"title":"数据库包装器","anchor":"module-django.db.backends","children":[{"title":"connection_created","anchor":"connection-created","children":[]}]},{"title":"Tasks signals","anchor":"tasks-signals","children":[{"title":"task_enqueued","anchor":"task-enqueued","children":[]},{"title":"task_started","anchor":"task-started","children":[]},{"title":"task_finished","anchor":"task-finished","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/6.0/ref/"}],"prev":{"docname":"ref/settings","title":"配置","url":"/zh-hans/6.0/ref/settings/"},"next":{"docname":"ref/tasks","title":"Tasks","url":"/zh-hans/6.0/ref/tasks/"},"formats":{"html":"/zh-hans/6.0/ref/signals/","markdown":"/zh-hans/6.0/ref/signals.md","json":"/zh-hans/6.0/ref/signals.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/signals.txt","official":"https://docs.djangoproject.com/zh-hans/6.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"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}