{"title":"约束参考","version":"4.0","locale":"zh-hans","docname":"ref/models/constraints","url":"/zh-hans/4.0/ref/models/constraints/","canonical":"https://djangodocs.dev/zh-hans/4.0/ref/models/constraints/","summary":"本模块中定义的类可以创建数据库约束。它们被添加到模型中 Meta.constraints 选项中。 引用内置约束 约束是在 django.db.models.constraint 中定义的，但为了方便，它们被导入到 django.db.models 中。标准的惯例是使用 from django.db import models…","html":"<span id=\"constraints-reference\"></span><h1>约束参考<a class=\"heading-anchor\" href=\"#module-django.db.models.constraints\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>本模块中定义的类可以创建数据库约束。它们被添加到模型中 <code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.constraints</span></code> 选项中。</p>\n<aside class=\"admonition-referencing-built-in-constraints admonition\">\n<p class=\"admonition-title\">引用内置约束</p>\n<p>约束是在 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.models.constraint</span></code> 中定义的，但为了方便，它们被导入到 <a class=\"reference internal\" href=\"/zh-hans/4.0/topics/db/models/#module-django.db.models\" title=\"django.db.models\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.db.models</span></code></a> 中。标准的惯例是使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">from</span> <span class=\"pre\">django.db</span> <span class=\"pre\">import</span> <span class=\"pre\">models</span></code> 作为 <code class=\"docutils literal notranslate\"><span class=\"pre\">models.&lt;Foo&gt;Constraint</span></code>。</p>\n</aside>\n<aside class=\"admonition-constraints-in-abstract-base-classes admonition\">\n<p class=\"admonition-title\">抽象基类中的约束</p>\n<p>你必须始终为约束指定一个唯一的名称。因此，你通常不能在抽象基类上指定一个约束，因为 <code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.craces</span></code> 选项是由子类继承的，每次的属性值（包括 <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>）都完全相同。为了解决名称碰撞的问题，名称的一部分可能包含 <code class=\"docutils literal notranslate\"><span class=\"pre\">'%(app_label)s'</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">'%(class)s'</span></code>，它们分别被具体模型的小写应用标签和类名所代替。例如 <code class=\"docutils literal notranslate\"><span class=\"pre\">CheckConstraint(check=Q(age__gte=18)，name='%(app_label)s_%(class)s_is_adult')</span></code>。</p>\n</aside>\n<aside class=\"admonition-validation-of-constraints admonition\">\n<p class=\"admonition-title\">约束的验证</p>\n<p>In general constraints are <strong>not</strong> checked during <code class=\"docutils literal notranslate\"><span class=\"pre\">full_clean()</span></code>, and do\nnot raise <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code>s. Rather you'll get a database integrity\nerror on <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">UniqueConstraint</span></code>s without a\n<a class=\"reference internal\" href=\"#django.db.models.UniqueConstraint.condition\" title=\"django.db.models.UniqueConstraint.condition\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">condition</span></code></a> (i.e. non-partial unique constraints)\nand <a class=\"reference internal\" href=\"#django.db.models.UniqueConstraint.expressions\" title=\"django.db.models.UniqueConstraint.expressions\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">expressions</span></code></a> (i.e. non-functional unique\nconstraints) are different in this regard, in that they leverage the\nexisting <code class=\"docutils literal notranslate\"><span class=\"pre\">validate_unique()</span></code> logic, and thus enable two-stage validation.\nIn addition to <code class=\"docutils literal notranslate\"><span class=\"pre\">IntegrityError</span></code> on <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> is\nalso raised during model validation when the <code class=\"docutils literal notranslate\"><span class=\"pre\">UniqueConstraint</span></code> is\nviolated.</p>\n</aside>\n<section id=\"checkconstraint\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">CheckConstraint</span></code><a class=\"heading-anchor\" href=\"#checkconstraint\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.CheckConstraint\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">CheckConstraint</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">check</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.CheckConstraint\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>在数据库中创建一个检查约束</p>\n</dd></dl>\n\n<section id=\"check\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">check</span></code><a class=\"heading-anchor\" href=\"#check\"><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.CheckConstraint.check\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">CheckConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">check</span></span><a class=\"heading-anchor\" href=\"#django.db.models.CheckConstraint.check\"><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/4.0/ref/models/querysets/#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Q</span></code></a> 对象或布尔值 <a class=\"reference internal\" href=\"/zh-hans/4.0/ref/models/expressions/#django.db.models.Expression\" title=\"django.db.models.Expression\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Expression</span></code></a>，它指定了你要强制约束的检查。</p>\n<p>例如，<code class=\"docutils literal notranslate\"><span class=\"pre\">CheckConstraint(check=Q(age__gte=18),</span> <span class=\"pre\">name='age_gte_18')</span></code> 确保年龄字段永远不小于 18。</p>\n</section>\n<section id=\"name\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code><a class=\"heading-anchor\" href=\"#name\"><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.CheckConstraint.name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">CheckConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">name</span></span><a class=\"heading-anchor\" href=\"#django.db.models.CheckConstraint.name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>约束的名称。你必须始终为约束指定一个唯一的名称。</p>\n</section>\n</section>\n<section id=\"uniqueconstraint\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">UniqueConstraint</span></code><a class=\"heading-anchor\" href=\"#uniqueconstraint\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.UniqueConstraint\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">UniqueConstraint</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">expressions</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">fields</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">()</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">condition</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">deferrable</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">include</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">opclasses</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">()</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.UniqueConstraint\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>在数据库中创建一个唯一约束。</p>\n</dd></dl>\n\n<section id=\"expressions\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">expressions</span></code><a class=\"heading-anchor\" href=\"#expressions\"><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.UniqueConstraint.expressions\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">UniqueConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">expressions</span></span><a class=\"heading-anchor\" href=\"#django.db.models.UniqueConstraint.expressions\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<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>Positional argument <code class=\"docutils literal notranslate\"><span class=\"pre\">*expressions</span></code> allows creating functional unique\nconstraints on expressions and database functions.</p>\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=\"n\">UniqueConstraint</span><span class=\"p\">(</span><span class=\"n\">Lower</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">desc</span><span class=\"p\">(),</span> <span class=\"s1\">&#39;category&#39;</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;unique_lower_name_category&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>creates a unique constraint on the lowercased value of the <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> field in\ndescending order and the <code class=\"docutils literal notranslate\"><span class=\"pre\">category</span></code> field in the default ascending order.</p>\n<p>Functional unique constraints have the same database restrictions as\n<a class=\"reference internal\" href=\"/zh-hans/4.0/ref/models/indexes/#django.db.models.Index.expressions\" title=\"django.db.models.Index.expressions\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Index.expressions</span></code></a>.</p>\n</section>\n<section id=\"fields\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code><a class=\"heading-anchor\" href=\"#fields\"><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.UniqueConstraint.fields\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">UniqueConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">fields</span></span><a class=\"heading-anchor\" href=\"#django.db.models.UniqueConstraint.fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>一个字段名的列表，它指定了你要强制约束的唯一列集。</p>\n<p>例如，<code class=\"docutils literal notranslate\"><span class=\"pre\">UniqueConstraint(field=['room',</span> <span class=\"pre\">'date'],</span> <span class=\"pre\">name='unique_booking')</span></code> 确保每个房间在每个日期只能被预订一次。</p>\n</section>\n<section id=\"id1\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code><a class=\"heading-anchor\" href=\"#id1\"><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.UniqueConstraint.name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">UniqueConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">name</span></span><a class=\"heading-anchor\" href=\"#django.db.models.UniqueConstraint.name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>约束的名称。你必须始终为约束指定一个唯一的名称。</p>\n</section>\n<section id=\"condition\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">condition</span></code><a class=\"heading-anchor\" href=\"#condition\"><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.UniqueConstraint.condition\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">UniqueConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">condition</span></span><a class=\"heading-anchor\" href=\"#django.db.models.UniqueConstraint.condition\"><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/4.0/ref/models/querysets/#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Q</span></code></a> 对象，用于指定你想要强制执行的约束条件。</p>\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=\"n\">UniqueConstraint</span><span class=\"p\">(</span><span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;user&#39;</span><span class=\"p\">],</span> <span class=\"n\">condition</span><span class=\"o\">=</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"s1\">&#39;DRAFT&#39;</span><span class=\"p\">),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;unique_draft_user&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>确保每个用户只有一份草稿。</p>\n<p>这些条件与 <a class=\"reference internal\" href=\"/zh-hans/4.0/ref/models/indexes/#django.db.models.Index.condition\" title=\"django.db.models.Index.condition\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Index.condition</span></code></a> 具有相同的数据库限制。</p>\n</section>\n<section id=\"deferrable\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">deferrable</span></code><a class=\"heading-anchor\" href=\"#deferrable\"><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.UniqueConstraint.deferrable\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">UniqueConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">deferrable</span></span><a class=\"heading-anchor\" href=\"#django.db.models.UniqueConstraint.deferrable\"><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\">Deferrable.DEFERRED</span></code> 或 <code class=\"docutils literal notranslate\"><span class=\"pre\">Deferrable.IMMEDIATE</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.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Deferrable</span><span class=\"p\">,</span> <span class=\"n\">UniqueConstraint</span>\n\n<span class=\"n\">UniqueConstraint</span><span class=\"p\">(</span>\n    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;unique_order&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;order&#39;</span><span class=\"p\">],</span>\n    <span class=\"n\">deferrable</span><span class=\"o\">=</span><span class=\"n\">Deferrable</span><span class=\"o\">.</span><span class=\"n\">DEFERRED</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>默认情况下，约束条件是不推迟的。推迟的约束条件在事务结束前不会被强制执行。即时约束将在每条命令后立即执行。</p>\n<aside class=\"admonition-mysql-mariadb-and-sqlite admonition\">\n<p class=\"admonition-title\">MySQL，MariaDB 和 SQLite。</p>\n<p>在 MySQL、MariaDB 和 SQLite 上，可推迟的唯一约束被忽略，因为它们都不支持。</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>推迟的唯一约束可能导致 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-createtable.html#id-1.9.3.85.9.4\">性能惩罚</a> 。</p>\n</aside>\n</section>\n<section id=\"include\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">include</span></code><a class=\"heading-anchor\" href=\"#include\"><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.UniqueConstraint.include\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">UniqueConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">include</span></span><a class=\"heading-anchor\" href=\"#django.db.models.UniqueConstraint.include\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-added\" data-version=\"3.2\">\n<p class=\"version-note-title\">New in Django 3.2</p></aside>\n<p>一个包含在覆盖的唯一索引中的字段名称的列表或元组，作为非键列。这允许只用索引扫描，用于只选择包含的字段（ <a class=\"reference internal\" href=\"#django.db.models.UniqueConstraint.include\" title=\"django.db.models.UniqueConstraint.include\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">include</span></code></a> ）和只过滤唯一字段（ <a class=\"reference internal\" href=\"#django.db.models.UniqueConstraint.fields\" title=\"django.db.models.UniqueConstraint.fields\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">fields</span></code></a> ）的查询。</p>\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=\"n\">UniqueConstraint</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;unique_booking&#39;</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;room&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;date&#39;</span><span class=\"p\">],</span> <span class=\"n\">include</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;full_name&#39;</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>将允许对 <code class=\"docutils literal notranslate\"><span class=\"pre\">room</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">date</span></code> 进行过滤，也可以选择 <code class=\"docutils literal notranslate\"><span class=\"pre\">full_name</span></code>，同时只从索引中获取数据。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">include</span></code> 只在 PostgreSQL 上支持。</p>\n<p>Non-key columns have the same database restrictions as <a class=\"reference internal\" href=\"/zh-hans/4.0/ref/models/indexes/#django.db.models.Index.include\" title=\"django.db.models.Index.include\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Index.include</span></code></a>.</p>\n</section>\n<section id=\"opclasses\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">opclasses</span></code><a class=\"heading-anchor\" href=\"#opclasses\"><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.UniqueConstraint.opclasses\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">UniqueConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">opclasses</span></span><a class=\"heading-anchor\" href=\"#django.db.models.UniqueConstraint.opclasses\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-added\" data-version=\"3.2\">\n<p class=\"version-note-title\">New in Django 3.2</p></aside>\n<p>The names of the <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/indexes-opclass.html\">PostgreSQL operator classes</a> to use for\nthis unique index. If you require a custom operator class, you must provide one\nfor each field in the index.</p>\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=\"n\">UniqueConstraint</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;unique_username&#39;</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;username&#39;</span><span class=\"p\">],</span> <span class=\"n\">opclasses</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;varchar_pattern_ops&#39;</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>creates a unique index on <code class=\"docutils literal notranslate\"><span class=\"pre\">username</span></code> using <code class=\"docutils literal notranslate\"><span class=\"pre\">varchar_pattern_ops</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">opclasses</span></code> 对于 PostgreSQL 以外的数据库来说是被忽略的。</p>\n</section>\n</section>","rootId":"module-django.db.models.constraints","toc":[{"title":"CheckConstraint","anchor":"checkconstraint","children":[{"title":"check","anchor":"check","children":[]},{"title":"name","anchor":"name","children":[]}]},{"title":"UniqueConstraint","anchor":"uniqueconstraint","children":[{"title":"expressions","anchor":"expressions","children":[]},{"title":"fields","anchor":"fields","children":[]},{"title":"name","anchor":"id1","children":[]},{"title":"condition","anchor":"condition","children":[]},{"title":"deferrable","anchor":"deferrable","children":[]},{"title":"include","anchor":"include","children":[]},{"title":"opclasses","anchor":"opclasses","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/4.0/ref/"},{"docname":"ref/models/index","title":"模型","url":"/zh-hans/4.0/ref/models/"}],"prev":{"docname":"ref/models/indexes","title":"模型索引参考","url":"/zh-hans/4.0/ref/models/indexes/"},"next":{"docname":"ref/models/meta","title":"模型 _meta API","url":"/zh-hans/4.0/ref/models/meta/"},"formats":{"html":"/zh-hans/4.0/ref/models/constraints/","markdown":"/zh-hans/4.0/ref/models/constraints.md","json":"/zh-hans/4.0/ref/models/constraints.json"},"source":"https://github.com/django/django/blob/stable/4.0.x/docs/ref/models/constraints.txt","official":"https://docs.djangoproject.com/zh-hans/4.0/ref/models/constraints/","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"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}