{"title":"Référence des contraintes","version":"5.2","locale":"fr","docname":"ref/models/constraints","url":"/fr/5.2/ref/models/constraints/","canonical":"https://djangodocs.dev/fr/5.2/ref/models/constraints/","summary":"Les classes définies dans ce module créent des contraintes de base de données. Elles sont ajoutées dans l’option Meta.constraints des modèles. Référencement des…","html":"<span id=\"constraints-reference\"></span><h1>Référence des contraintes<a class=\"heading-anchor\" href=\"#module-django.db.models.constraints\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Les classes définies dans ce module créent des contraintes de base de données. Elles sont ajoutées dans l’option <a class=\"reference internal\" href=\"/fr/5.2/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> des modèles.</p>\n<aside class=\"admonition-referencing-built-in-constraints admonition\">\n<p class=\"admonition-title\">Référencement des contraintes intégrées</p>\n<p>Les contraintes sont définies dans <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.models.constraints</span></code>, mais par commodité elles sont importées dans <a class=\"reference internal\" href=\"/fr/5.2/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>. La convention standard est d’utiliser <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> et de se référer aux contraintes avec <code class=\"docutils literal notranslate\"><span class=\"pre\">models.&lt;Telle&gt;Constraint</span></code>.</p>\n</aside>\n<aside class=\"admonition-constraints-in-abstract-base-classes admonition\">\n<p class=\"admonition-title\">Contraintes dans les classes de base abstraites</p>\n<p>Les contraintes doivent toujours être nommées de façon unique. Cela signifie qu’il n’est pas possible de définir des contraintes dans une classe de base abstraite, dans la mesure où l’option <a class=\"reference internal\" href=\"/fr/5.2/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> est héritée par les sous-classes avec exactement les mêmes valeurs d’attributs (y compris <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>). Pour éviter des collisions de nom, le nom peut contenir <code class=\"docutils literal notranslate\"><span class=\"pre\">'%(app_label)s'</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">'%(class)s'</span></code> qui seront remplacés respectivement par l’étiquette de l’application et le nom de la classe du modèle concret (tout en minuscules). Par exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"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 des contraintes</p>\n<p>Les contraintes sont vérifiées durant la <a class=\"reference internal\" href=\"/fr/5.2/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">validation des modèles</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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Classe de base pour toutes les contraintes. Les sous-classes doivent implémenter les méthodes <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> et <code class=\"docutils literal notranslate\"><span class=\"pre\">validate()</span></code>.</p>\n<aside class=\"version-note version-deprecated\" data-version=\"5.0\">\n<p class=\"version-note-title\">Deprecated since Django 5.0</p><p><span class=\"versionmodified deprecated\">Obsolète depuis la version 5.0: </span>La prise en charge de la transmission d’arguments positionnels est obsolète.</p>\n</aside>\n</dd></dl>\n\n<p>Toutes les contraintes partagent les paramètres suivants :</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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le nom de la contrainte. La contrainte doit toujours posséder un nom unique.</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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le code d’erreur utilisé lorsque <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> est générée pendant la <a class=\"reference internal\" href=\"/fr/5.2/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">phase de validation des modèles</span></a>. Contient <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> par défaut.</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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le message d’erreur utilisé lorsque <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> est générée pendant la <a class=\"reference internal\" href=\"/fr/5.2/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">phase de validation des modèles</span></a>. Contient par défaut <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;La</span> <span class=\"pre\">contrainte</span> <span class=\"pre\">%(name)sn'est</span> <span class=\"pre\">pas</span> <span class=\"pre\">respectée&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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Valide que la contrainte définie sur le modèle est respectée pour l’instance. Cela produira une requête vers la base de données pour s’assurer que la contrainte est bien respectée. Si des champs de la liste <code class=\"docutils literal notranslate\"><span class=\"pre\">exclude</span></code> sont nécessaires pour valider la contrainte, celle-ci sera ignorée.</p>\n<p>Génère <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> lorsque la contrainte n’est pas respectée.</p>\n<p>Cette méthode doit être implémentée par les sous-classes.</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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Crée une contrainte de vérification dans la base de données.</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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Un objet <a class=\"reference internal\" href=\"/fr/5.2/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> ou une <a class=\"reference internal\" href=\"/fr/5.2/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> booléenne qui indique le contrôle conditionnel que la contrainte souhaitée doit appliquer.</p>\n<p>Par exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"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>assure que le champ <code class=\"docutils literal notranslate\"><span class=\"pre\">age</span></code> n’est jamais plus petit que 18.</p>\n<aside class=\"admonition-expression-order admonition\">\n<p class=\"admonition-title\">Ordre des expressions</p>\n<p>L’ordre des arguments <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code> n’est pas forcément préservé. Toutefois, l’ordre des expressions <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code> elles-mêmes est conservé. Cela peut être important pour les bases de données qui préservent l’ordre des expressions de contrôle de contrainte pour des raisons de performance. Par exemple, utilisez le format suivant si l’ordre est important :</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>Les contrôles avec des champs possiblement nuls avec Oracle &lt; 23c doivent inclure une condition autorisant les valeurs <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code> afin que <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> se comporte de la même façon que la validation des contraintes de contrôle. Par exemple, si <code class=\"docutils literal notranslate\"><span class=\"pre\">age</span></code> est un champ pouvant être nul :</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<aside class=\"version-note version-deprecated\" data-version=\"5.1\">\n<p class=\"version-note-title\">Deprecated since Django 5.1</p><p><span class=\"versionmodified deprecated\">Obsolète depuis la version 5.1: </span>L’attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">check</span></code> a été rendu obsolète en faveur de <code class=\"docutils literal notranslate\"><span class=\"pre\">condition</span></code>.</p>\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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Crée une contrainte d’unicité dans la base de données.</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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>L’argument positionnel <code class=\"docutils literal notranslate\"><span class=\"pre\">*expressions</span></code> permet de créer des contraintes d’unicité fonctionnelles sur des expressions et des fonctions de base de données.</p>\n<p>Par exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"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>crée une contrainte d’unicité sur la valeur en minuscules du champ <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> dans l’ordre alphabétique inverse et le champ <code class=\"docutils literal notranslate\"><span class=\"pre\">category</span></code> dans l’ordre alphabétique par défaut.</p>\n<p>Les contraintes d’unicité basées sur des fonctions sont soumises aux même restrictions de base de données que <a class=\"reference internal\" href=\"/fr/5.2/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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Une liste de noms de champs qui précise l’ensemble unique de colonnes pour lesquelles la contrainte va assurer l’unicité.</p>\n<p>Par exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"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>assure que chaque chambre ne peut être réservée qu’une seule fois par 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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Un objet <a class=\"reference internal\" href=\"/fr/5.2/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> qui indique la condition que la contrainte souhaitée doit appliquer.</p>\n<p>Par exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"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>s’assure que chaque utilisateur dispose d’un seul brouillon.</p>\n<p>Ces conditions sont soumises aux même restrictions de base de données que <a class=\"reference internal\" href=\"/fr/5.2/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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Définissez ce paramètre pour créer une contrainte d’unicité différable. Les valeurs acceptées sont <code class=\"docutils literal notranslate\"><span class=\"pre\">Deferrable.DEFERRED</span></code> ou <code class=\"docutils literal notranslate\"><span class=\"pre\">Deferrable.IMMEDIATE</span></code>. Par exemple</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"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>Par défaut, les contraintes ne sont pas différées. Une contrainte différée ne sera pas appliquée avant la fin de la transaction. Une contrainte immédiate sera appliquée immédiatement après chaque commande.</p>\n<aside class=\"admonition-mysql-mariadb-and-sqlite admonition\">\n<p class=\"admonition-title\">MySQL, MariaDB et SQLite.</p>\n<p>Les contraintes d’unicité différables sont ignorées avec MySQL, MariaDB et SQLite car ces moteurs ne les prennent pas en charge.</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>Les contraintes d’unicité différées peuvent amener à des <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-createtable.html#id-1.9.3.85.9.4\">performances réduites</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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Une liste ou un tuple de noms de champs à inclure dans l’index unique couvrant, représentant des colonnes qui ne sont pas des clés. Cela permet des analyses en index pur avec des requêtes qui ne sélectionnent que les champs inclus (<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>) et qui ne filtrent que sur les champs indexés (<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>Par exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"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>permettra le filtrage sur <code class=\"docutils literal notranslate\"><span class=\"pre\">room</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">date</span></code>, sélectionnant aussi <code class=\"docutils literal notranslate\"><span class=\"pre\">full_name</span></code>, tout en ne récupérant les données qu’à partir de l’index.</p>\n<p>Les contraintes d’unicité sur des colonnes n’étant pas des clés sont ignorées dans les bases de données autres que PostgreSQL.</p>\n<p>Les colonnes qui ne sont pas des clés sont soumises aux même restrictions de base de données que pour <a class=\"reference internal\" href=\"/fr/5.2/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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Les noms des <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/indexes-opclass.html\">classes d’opérateurs PostgreSQL</a> à utiliser pour cet index unique. Si vous nécessitez une classe d’opérateur personnalisée, vous devez en fournir une pour chaque champ de l’index.</p>\n<p>Par exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"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>crée un index unique sur <code class=\"docutils literal notranslate\"><span class=\"pre\">username</span></code> en utilisant <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> est ignoré pour les bases de données autres que 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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Indique si les lignes contenant des valeurs <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code> couvertes par la contrainte d’unicité doivent être considérées comme distinctes les unes des autres. La valeur par défaut est <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, ce qui indique que la valeur par défaut de la base de données est utilisée, celle-ci étant <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> pour la majorité des moteurs.</p>\n<p>Par exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"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>crée une contrainte d’unicité qui n’autorise qu’une seule ligne à contenir une valeur <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code> dans la colonne <code class=\"docutils literal notranslate\"><span class=\"pre\">ordering</span></code>.</p>\n<p>Les contraintes d’unicité avec <code class=\"docutils literal notranslate\"><span class=\"pre\">nulls_distinct</span></code> sont ignorées dans les bases de données autres que PostgreSQL 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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le code d’erreur utilisé lorsque une erreur <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> est générée pendant la <a class=\"reference internal\" href=\"/fr/5.2/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">phase de validation des modèles</span></a>.</p>\n<p>Vaut par défaut <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>, quand soit <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> est définie ou que <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> n’est pas définie.</p>\n<p>Si <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> est défini sans attr:.UniqueConstraint.condition, la valeur par défaut est le code d’erreur de <a class=\"reference internal\" href=\"/fr/5.2/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> quand il y a plusieurs champs, et le code d’erreur de <a class=\"reference internal\" href=\"/fr/5.2/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> lorsqu’il n’y a qu’un seul champ.</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>Dans les anciennes versions, le code <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> n’était pas utilisé lorsque <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> était définie sans <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\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le message d’erreur utilisé lorsque une erreur <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> est générée pendant la <a class=\"reference internal\" href=\"/fr/5.2/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">phase de validation des modèles</span></a>.</p>\n<p>Vaut par défaut <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>, quand soit <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> est définie ou que <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> n’est pas définie.</p>\n<p>Si <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> est défini sans attr:.UniqueConstraint.condition, la valeur par défaut est le message d’erreur de <a class=\"reference internal\" href=\"/fr/5.2/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> quand il y a plusieurs champs, et le message d’erreur de <a class=\"reference internal\" href=\"/fr/5.2/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> lorsqu’il n’y a qu’un seul champ.</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>Dans les anciennes versions, le code <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> n’était pas utilisé lorsque <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> était définie sans <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":"Référence de l’API","url":"/fr/5.2/ref/"},{"docname":"ref/models/index","title":"Modèles","url":"/fr/5.2/ref/models/"}],"prev":{"docname":"ref/models/indexes","title":"Référence des index de modèle","url":"/fr/5.2/ref/models/indexes/"},"next":{"docname":"ref/models/meta","title":"L’API _meta des modèles","url":"/fr/5.2/ref/models/meta/"},"formats":{"html":"/fr/5.2/ref/models/constraints/","markdown":"/fr/5.2/ref/models/constraints.md","json":"/fr/5.2/ref/models/constraints.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/ref/models/constraints.txt","official":"https://docs.djangoproject.com/fr/5.2/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"]}