{"title":"Constraints reference","version":"6.0","locale":"id","docname":"ref/models/constraints","url":"/id/6.0/ref/models/constraints/","canonical":"https://djangodocs.dev/id/6.0/ref/models/constraints/","summary":"The classes defined in this module create database constraints. They are added in the model Meta.constraints option. Referencing built-in constraints Constraints…","html":"<span id=\"constraints-reference\"></span><h1>Constraints reference<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>The classes defined in this module create database constraints. They are added\nin the model <a class=\"reference internal\" href=\"/id/6.0/ref/models/options/#django.db.models.Options.constraints\" title=\"django.db.models.Options.constraints\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.constraints</span></code></a>\noption.</p>\n<aside class=\"admonition-referencing-built-in-constraints admonition\">\n<p class=\"admonition-title\">Referencing built-in constraints</p>\n<p>Constraints are defined in <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.models.constraints</span></code>, but for\nconvenience they're imported into <a class=\"reference internal\" href=\"/id/6.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>. The standard\nconvention is to use <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> and refer to the\nconstraints as <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\">Constraints in abstract base classes</p>\n<p>You must always specify a unique name for the constraint. As such, you\ncannot normally specify a constraint on an abstract base class, since the\n<a class=\"reference internal\" href=\"/id/6.0/ref/models/options/#django.db.models.Options.constraints\" title=\"django.db.models.Options.constraints\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.constraints</span></code></a> option is\ninherited by subclasses, with exactly the same values for the attributes\n(including <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>) each time. To work around name collisions, part of the\nname may contain <code class=\"docutils literal notranslate\"><span class=\"pre\">'%(app_label)s'</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">'%(class)s'</span></code>, which are\nreplaced, respectively, by the lowercased app label and class name of the\nconcrete model. For example:</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\">CheckConstraint</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\">age__gte</span><span class=\"o\">=</span><span class=\"mi\">18</span><span class=\"p\">),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;</span><span class=\"si\">%(app_label)s</span><span class=\"s2\">_</span><span class=\"si\">%(class)s</span><span class=\"s2\">_is_adult&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n<aside class=\"admonition-validation-of-constraints admonition\">\n<p class=\"admonition-title\">Validation of Constraints</p>\n<p>Constraints are checked during the <a class=\"reference internal\" href=\"/id/6.0/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">model validation</span></a>.</p>\n</aside>\n<section id=\"baseconstraint\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">BaseConstraint</span></code><a class=\"heading-anchor\" href=\"#baseconstraint\"><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.BaseConstraint\">\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\">BaseConstraint</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\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">violation_error_code</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\">violation_error_message</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.BaseConstraint\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Base class for all constraints. Subclasses must implement\n<code class=\"docutils literal notranslate\"><span class=\"pre\">constraint_sql()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">create_sql()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">remove_sql()</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">validate()</span></code> methods.</p>\n</dd></dl>\n\n<p>All constraints have the following parameters in common:</p>\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.BaseConstraint.name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">BaseConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">name</span></span><a class=\"heading-anchor\" href=\"#django.db.models.BaseConstraint.name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The name of the constraint. You must always specify a unique name for the\nconstraint.</p>\n</section>\n<section id=\"violation-error-code\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">violation_error_code</span></code><a class=\"heading-anchor\" href=\"#violation-error-code\"><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.BaseConstraint.violation_error_code\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">BaseConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">violation_error_code</span></span><a class=\"heading-anchor\" href=\"#django.db.models.BaseConstraint.violation_error_code\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The error code used when <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> is raised during\n<a class=\"reference internal\" href=\"/id/6.0/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">model validation</span></a>. Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p>\n</section>\n<section id=\"violation-error-message\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">violation_error_message</span></code><a class=\"heading-anchor\" href=\"#violation-error-message\"><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.BaseConstraint.violation_error_message\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">BaseConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">violation_error_message</span></span><a class=\"heading-anchor\" href=\"#django.db.models.BaseConstraint.violation_error_message\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The error message used when <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> is raised during\n<a class=\"reference internal\" href=\"/id/6.0/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">model validation</span></a>. Defaults to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;Constraint</span> <span class=\"pre\">“%(name)s”</span> <span class=\"pre\">is</span> <span class=\"pre\">violated.&quot;</span></code>.</p>\n</section>\n<section id=\"validate\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">validate()</span></code><a class=\"heading-anchor\" href=\"#validate\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.BaseConstraint.validate\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">BaseConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">validate</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">instance</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">exclude</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\">using</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">DEFAULT_DB_ALIAS</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.BaseConstraint.validate\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Validates that the constraint, defined on <code class=\"docutils literal notranslate\"><span class=\"pre\">model</span></code>, is respected on the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code>. This will do a query on the database to ensure that the\nconstraint is respected. If fields in the <code class=\"docutils literal notranslate\"><span class=\"pre\">exclude</span></code> list are needed to\nvalidate the constraint, the constraint is ignored.</p>\n<p>Raise a <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> if the constraint is violated.</p>\n<p>This method must be implemented by a subclass.</p>\n</section>\n</section>\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\">condition</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">violation_error_code</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\">violation_error_message</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</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>Creates a check constraint in the database.</p>\n</dd></dl>\n\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.CheckConstraint.condition\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">CheckConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">condition</span></span><a class=\"heading-anchor\" href=\"#django.db.models.CheckConstraint.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 <a class=\"reference internal\" href=\"/id/6.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> object or boolean <a class=\"reference internal\" href=\"/id/6.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> that\nspecifies the conditional check you want the constraint to enforce.</p>\n<p>Sebagai contoh:</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\">CheckConstraint</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\">age__gte</span><span class=\"o\">=</span><span class=\"mi\">18</span><span class=\"p\">),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;age_gte_18&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>ensures the age field is never less than 18.</p>\n<aside class=\"admonition-expression-order admonition\">\n<p class=\"admonition-title\">Expression order</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code> argument order is not necessarily preserved, however the order of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code> expressions themselves are preserved. This may be important for\ndatabases that preserve check constraint expression order for performance\nreasons. For example, use the following format if order matters:</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\">CheckConstraint</span><span class=\"p\">(</span>\n    <span class=\"n\">condition</span><span class=\"o\">=</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">age__gte</span><span class=\"o\">=</span><span class=\"mi\">18</span><span class=\"p\">)</span> <span class=\"o\">&amp;</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">expensive_check</span><span class=\"o\">=</span><span class=\"n\">condition</span><span class=\"p\">),</span>\n    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;age_gte_18_and_others&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n<aside class=\"admonition-oracle-23c admonition\">\n<p class=\"admonition-title\">Oracle &lt; 23c</p>\n<p>Checks with nullable fields on Oracle &lt; 23c must include a condition\nallowing for <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code> values in order for <a class=\"reference internal\" href=\"#django.db.models.BaseConstraint.validate\" title=\"django.db.models.BaseConstraint.validate\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">validate()</span></code></a>\nto behave the same as check constraints validation. For example, if <code class=\"docutils literal notranslate\"><span class=\"pre\">age</span></code>\nis a nullable field:</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\">CheckConstraint</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\">age__gte</span><span class=\"o\">=</span><span class=\"mi\">18</span><span class=\"p\">)</span> <span class=\"o\">|</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">age__isnull</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;age_gte_18&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</aside>\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>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">nulls_distinct</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\">violation_error_code</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\">violation_error_message</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</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>Creates a uniqueness guarantee in the database, enforced by either a\nunique constraint or a unique index depending on the options used.</p>\n</dd></dl>\n\n<aside class=\"admonition-constraint-vs-index-implementation admonition\">\n<p class=\"admonition-title\">Constraint vs. index implementation</p>\n<p>Setting only <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\">UniqueConstraint.fields</span></code></a> creates a true database\nconstraint (<code class=\"docutils literal notranslate\"><span class=\"pre\">ADD</span> <span class=\"pre\">CONSTRAINT</span> <span class=\"pre\">...</span> <span class=\"pre\">UNIQUE</span></code>). Specifying any of\n<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\">UniqueConstraint.expressions</span></code></a>, <a class=\"reference internal\" href=\"#django.db.models.UniqueConstraint.opclasses\" title=\"django.db.models.UniqueConstraint.opclasses\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">UniqueConstraint.opclasses</span></code></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\">UniqueConstraint.condition</span></code></a>, or <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\">UniqueConstraint.include</span></code></a>\ncreates a unique index (<code class=\"docutils literal notranslate\"><span class=\"pre\">CREATE</span> <span class=\"pre\">UNIQUE</span> <span class=\"pre\">INDEX</span></code>) instead.</p>\n<p>In this documentation, the term &quot;unique constraint&quot; is used for both\ncases to mean a uniqueness guarantee enforced by the database.</p>\n</aside>\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<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>Sebagai contoh:</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=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">desc</span><span class=\"p\">(),</span> <span class=\"s2\">&quot;category&quot;</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;unique_lower_name_category&quot;</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=\"/id/6.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>A list of field names that specifies the unique set of columns you want the\nconstraint to enforce.</p>\n<p>Sebagai contoh:</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=\"s2\">&quot;room&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;date&quot;</span><span class=\"p\">],</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;unique_booking&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>ensures each room can only be booked once for each date.</p>\n</section>\n<section id=\"id1\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">condition</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.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 <a class=\"reference internal\" href=\"/id/6.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> object that specifies the condition you want the constraint to\nenforce.</p>\n<p>Sebagai contoh:</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=\"s2\">&quot;user&quot;</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=\"s2\">&quot;DRAFT&quot;</span><span class=\"p\">),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;unique_draft_user&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>ensures that each user only has one draft.</p>\n<p>These conditions have the same database restrictions as\n<a class=\"reference internal\" href=\"/id/6.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>Set this parameter to create a deferrable unique constraint. Accepted values\nare <code class=\"docutils literal notranslate\"><span class=\"pre\">Deferrable.DEFERRED</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">Deferrable.IMMEDIATE</span></code>. For example:</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=\"s2\">&quot;unique_order&quot;</span><span class=\"p\">,</span>\n    <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;order&quot;</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>By default constraints are not deferred. A deferred constraint will not be\nenforced until the end of the transaction. An immediate constraint will be\nenforced immediately after every command.</p>\n<p>Unique constraints with <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>,\n<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.opclasses\" title=\"django.db.models.UniqueConstraint.opclasses\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">opclasses</span></code></a>, or\n<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> may be implemented as unique indexes\nrather than unique constraints. In that case, <code class=\"docutils literal notranslate\"><span class=\"pre\">deferrable</span></code> cannot be set.</p>\n<aside class=\"admonition-mysql-mariadb-and-sqlite admonition\">\n<p class=\"admonition-title\">MySQL, MariaDB, and SQLite.</p>\n<p>Deferrable unique constraints are ignored on MySQL, MariaDB, and SQLite as\nthey do not support them.</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Peringatan</p>\n<p>Deferred unique constraints may lead to a <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-createtable.html#id-1.9.3.85.9.4\">performance penalty</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<p>A list or tuple of the names of the fields to be included in the covering\nunique index as non-key columns. This allows index-only scans to be used for\nqueries that select only included fields (<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>)\nand filter only by unique fields (<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>Sebagai contoh:</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=\"s2\">&quot;unique_booking&quot;</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;room&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;date&quot;</span><span class=\"p\">],</span> <span class=\"n\">include</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;full_name&quot;</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>will allow filtering on <code class=\"docutils literal notranslate\"><span class=\"pre\">room</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">date</span></code>, also selecting <code class=\"docutils literal notranslate\"><span class=\"pre\">full_name</span></code>,\nwhile fetching data only from the index.</p>\n<p>Unique constraints with non-key columns are ignored for databases besides\nPostgreSQL.</p>\n<p>Non-key columns have the same database restrictions as <a class=\"reference internal\" href=\"/id/6.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<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>Sebagai contoh:</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>\n    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;unique_username&quot;</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;username&quot;</span><span class=\"p\">],</span> <span class=\"n\">opclasses</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;varchar_pattern_ops&quot;</span><span class=\"p\">]</span>\n<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> are ignored for databases besides PostgreSQL.</p>\n</section>\n<section id=\"nulls-distinct\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">nulls_distinct</span></code><a class=\"heading-anchor\" href=\"#nulls-distinct\"><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.nulls_distinct\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">UniqueConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">nulls_distinct</span></span><a class=\"heading-anchor\" href=\"#django.db.models.UniqueConstraint.nulls_distinct\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Whether rows containing <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code> values covered by the unique constraint should\nbe considered distinct from each other. The default value is <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> which\nuses the database default which is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> on most backends.</p>\n<p>Sebagai contoh:</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=\"s2\">&quot;ordering&quot;</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;ordering&quot;</span><span class=\"p\">],</span> <span class=\"n\">nulls_distinct</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>creates a unique constraint that only allows one row to store a <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code> value\nin the <code class=\"docutils literal notranslate\"><span class=\"pre\">ordering</span></code> column.</p>\n<p>Unique constraints with <code class=\"docutils literal notranslate\"><span class=\"pre\">nulls_distinct</span></code> are ignored for databases besides\nPostgreSQL 15+.</p>\n</section>\n<section id=\"id2\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">violation_error_code</span></code><a class=\"heading-anchor\" href=\"#id2\"><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.violation_error_code\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">UniqueConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">violation_error_code</span></span><a class=\"heading-anchor\" href=\"#django.db.models.UniqueConstraint.violation_error_code\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The error code used when a <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> is raised during\n<a class=\"reference internal\" href=\"/id/6.0/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">model validation</span></a>.</p>\n<p>Defaults to <a class=\"reference internal\" href=\"#django.db.models.BaseConstraint.violation_error_code\" title=\"django.db.models.BaseConstraint.violation_error_code\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">BaseConstraint.violation_error_code</span></code></a>, when either\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\">UniqueConstraint.condition</span></code></a> is set or <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\">UniqueConstraint.fields</span></code></a>\nis not set.</p>\n<p>If <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\">UniqueConstraint.fields</span></code></a> is set 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\">UniqueConstraint.condition</span></code></a>, defaults to the\n<a class=\"reference internal\" href=\"/id/6.0/ref/models/options/#django.db.models.Options.unique_together\" title=\"django.db.models.Options.unique_together\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.unique_together</span></code></a> error\ncode when there are multiple fields, and to the <a class=\"reference internal\" href=\"/id/6.0/ref/models/fields/#django.db.models.Field.unique\" title=\"django.db.models.Field.unique\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Field.unique</span></code></a> error\ncode when there is a single field.</p>\n<aside class=\"version-note version-changed\" data-version=\"5.2\">\n<p class=\"version-note-title\">Changed in Django 5.2</p><p>In older versions, the provided\n<a class=\"reference internal\" href=\"#django.db.models.UniqueConstraint.violation_error_code\" title=\"django.db.models.UniqueConstraint.violation_error_code\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">UniqueConstraint.violation_error_code</span></code></a> was not used when\n<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\">UniqueConstraint.fields</span></code></a> was set 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\">UniqueConstraint.condition</span></code></a>.</p>\n</aside>\n</section>\n<section id=\"id3\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">violation_error_message</span></code><a class=\"heading-anchor\" href=\"#id3\"><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.violation_error_message\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">UniqueConstraint.</span></span><span class=\"sig-name descname\"><span class=\"pre\">violation_error_message</span></span><a class=\"heading-anchor\" href=\"#django.db.models.UniqueConstraint.violation_error_message\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The error message used when a <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> is raised during\n<a class=\"reference internal\" href=\"/id/6.0/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">model validation</span></a>.</p>\n<p>Defaults to <a class=\"reference internal\" href=\"#django.db.models.BaseConstraint.violation_error_message\" title=\"django.db.models.BaseConstraint.violation_error_message\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">BaseConstraint.violation_error_message</span></code></a>, when either\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\">UniqueConstraint.condition</span></code></a> is set or <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\">UniqueConstraint.fields</span></code></a>\nis not set.</p>\n<p>If <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\">UniqueConstraint.fields</span></code></a> is set 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\">UniqueConstraint.condition</span></code></a>, defaults to the\n<a class=\"reference internal\" href=\"/id/6.0/ref/models/options/#django.db.models.Options.unique_together\" title=\"django.db.models.Options.unique_together\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.unique_together</span></code></a> error\nmessage when there are multiple fields, and to the <a class=\"reference internal\" href=\"/id/6.0/ref/models/fields/#django.db.models.Field.unique\" title=\"django.db.models.Field.unique\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Field.unique</span></code></a> error\nmessage when there is a single field.</p>\n<aside class=\"version-note version-changed\" data-version=\"5.2\">\n<p class=\"version-note-title\">Changed in Django 5.2</p><p>In older versions, the provided\n<a class=\"reference internal\" href=\"#django.db.models.UniqueConstraint.violation_error_message\" title=\"django.db.models.UniqueConstraint.violation_error_message\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">UniqueConstraint.violation_error_message</span></code></a> was not used when\n<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\">UniqueConstraint.fields</span></code></a> was set 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\">UniqueConstraint.condition</span></code></a>.</p>\n</aside>\n</section>\n</section>","rootId":"module-django.db.models.constraints","toc":[{"title":"BaseConstraint","anchor":"baseconstraint","children":[{"title":"name","anchor":"name","children":[]},{"title":"violation_error_code","anchor":"violation-error-code","children":[]},{"title":"violation_error_message","anchor":"violation-error-message","children":[]},{"title":"validate()","anchor":"validate","children":[]}]},{"title":"CheckConstraint","anchor":"checkconstraint","children":[{"title":"condition","anchor":"condition","children":[]}]},{"title":"UniqueConstraint","anchor":"uniqueconstraint","children":[{"title":"expressions","anchor":"expressions","children":[]},{"title":"fields","anchor":"fields","children":[]},{"title":"condition","anchor":"id1","children":[]},{"title":"deferrable","anchor":"deferrable","children":[]},{"title":"include","anchor":"include","children":[]},{"title":"opclasses","anchor":"opclasses","children":[]},{"title":"nulls_distinct","anchor":"nulls-distinct","children":[]},{"title":"violation_error_code","anchor":"id2","children":[]},{"title":"violation_error_message","anchor":"id3","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Acuan API","url":"/id/6.0/ref/"},{"docname":"ref/models/index","title":"Model","url":"/id/6.0/ref/models/"}],"prev":{"docname":"ref/models/indexes","title":"Acuan index model","url":"/id/6.0/ref/models/indexes/"},"next":{"docname":"ref/models/meta","title":"API  _meta model","url":"/id/6.0/ref/models/meta/"},"formats":{"html":"/id/6.0/ref/models/constraints/","markdown":"/id/6.0/ref/models/constraints.md","json":"/id/6.0/ref/models/constraints.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/models/constraints.txt","official":"https://docs.djangoproject.com/id/6.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","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}