{"title":"PostgreSQL-specifika databasbegränsningar","version":"6.0","locale":"sv","docname":"ref/contrib/postgres/constraints","url":"/sv/6.0/ref/contrib/postgres/constraints/","canonical":"https://djangodocs.dev/sv/6.0/ref/contrib/postgres/constraints/","summary":"PostgreSQL stöder ytterligare dataintegritetsbegränsningar tillgängliga från modulen django.contrib.postgres.constraints.","html":"<span id=\"postgresql-specific-database-constraints\"></span><h1>PostgreSQL-specifika databasbegränsningar<a class=\"heading-anchor\" href=\"#module-django.contrib.postgres.constraints\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>PostgreSQL stöder ytterligare dataintegritetsbegränsningar tillgängliga från modulen <code class=\"docutils literal notranslate\">django.contrib.postgres.constraints</code>. De läggs till i modellen <a class=\"reference internal\" href=\"/sv/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\">Meta.constraints</code></a> alternativ.</p>\n<section id=\"exclusionconstraint\">\n<h2><code class=\"docutils literal notranslate\">Uteslutningsbegränsning</code><a class=\"heading-anchor\" href=\"#exclusionconstraint\"><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.contrib.postgres.constraints.ExclusionConstraint\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExclusionConstraint</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\">*</abbr></span></em>, <em class=\"sig-param\">name</em>, <em class=\"sig-param\">expressions</em>, <em class=\"sig-param\">index_type<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">condition<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">deferrable<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">include<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">violation_error_code<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">violation_error_message<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.constraints.ExclusionConstraint\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Skapar en uteslutningsbegränsning i databasen. Internt implementerar PostgreSQL uteslutningsbegränsningar med hjälp av index. Standardindextypen är <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/gist.html\">GiST</a>. För att använda dem måste du aktivera <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/btree-gist.html\">btree_gist-tillägget</a> på PostgreSQL. Du kan installera den med hjälp av <a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/postgres/operations/#django.contrib.postgres.operations.BtreeGistExtension\" title=\"django.contrib.postgres.operations.BtreeGistExtension\"><code class=\"xref py py-class docutils literal notranslate\">BtreeGistExtension</code></a> migreringsoperation.</p>\n<p>Om du försöker infoga en ny rad som står i konflikt med en befintlig rad, uppstår ett <a class=\"reference internal\" href=\"/sv/6.0/ref/exceptions/#django.db.IntegrityError\" title=\"django.db.IntegrityError\"><code class=\"xref py py-exc docutils literal notranslate\">IntegrityError</code></a>. På samma sätt när en uppdatering står i konflikt med en befintlig rad.</p>\n<p>Begränsningar för uteslutning kontrolleras under <a class=\"reference internal\" href=\"/sv/6.0/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">modellvalidering</span></a>.</p>\n</dd></dl>\n\n<section id=\"name\">\n<h3><code class=\"docutils literal notranslate\">namn</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.contrib.postgres.constraints.ExclusionConstraint.name\">\n<span class=\"sig-prename descclassname\">ExclusionConstraint.</span><span class=\"sig-name descname\">name</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.constraints.ExclusionConstraint.name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Se <a class=\"reference internal\" href=\"/sv/6.0/ref/models/constraints/#django.db.models.BaseConstraint.name\" title=\"django.db.models.BaseConstraint.name\"><code class=\"xref py py-attr docutils literal notranslate\">BaseConstraint.name</code></a>.</p>\n</section>\n<section id=\"expressions\">\n<h3><code class=\"docutils literal notranslate\">uttryck</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.contrib.postgres.constraints.ExclusionConstraint.expressions\">\n<span class=\"sig-prename descclassname\">ExclusionConstraint.</span><span class=\"sig-name descname\">expressions</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.constraints.ExclusionConstraint.expressions\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>En iterabel med 2-tuples. Det första elementet är ett uttryck eller en sträng. Det andra elementet är en SQL-operator som representeras som en sträng. För att undvika skrivfel kan du använda <a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/postgres/fields/#django.contrib.postgres.fields.RangeOperators\" title=\"django.contrib.postgres.fields.RangeOperators\"><code class=\"xref py py-class docutils literal notranslate\">RangeOperators</code></a> som mappar operatörerna med strängar. Till exempel:</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>expressions <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">(</span><span class=\"s2\">&quot;timespan&quot;</span><span class=\"p\">,</span> RangeOperators<span class=\"o\">.</span>ADJACENT_TO<span class=\"p\">),</span>\n    <span class=\"p\">(</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;room&quot;</span><span class=\"p\">),</span> RangeOperators<span class=\"o\">.</span>EQUAL<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<aside class=\"admonition-restrictions-on-operators admonition\" role=\"note\">\n<p class=\"admonition-title\">Begränsningar för operatörer.</p>\n<p>Endast kommutativa operatorer kan användas i uteslutningsbegränsningar.</p>\n</aside>\n<p>Uttrycket <a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/postgres/indexes/#django.contrib.postgres.indexes.OpClass\" title=\"django.contrib.postgres.indexes.OpClass\"><code class=\"xref py py-class docutils literal notranslate\">OpClass()</code></a> kan användas för att ange en anpassad <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/indexes-opclass.html\">operatorklass</a> för begränsningsuttrycken. Till exempel:</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>expressions <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">(</span>OpClass<span class=\"p\">(</span><span class=\"s2\">&quot;circle&quot;</span><span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;circle_ops&quot;</span><span class=\"p\">),</span> RangeOperators<span class=\"o\">.</span>OVERLAPS<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>skapar en uteslutningsbegränsning på <code class=\"docutils literal notranslate\">circle</code> med hjälp av <code class=\"docutils literal notranslate\">circle_ops</code>.</p>\n</section>\n<section id=\"index-type\">\n<h3><code class=\"docutils literal notranslate\">index_typ</code><a class=\"heading-anchor\" href=\"#index-type\"><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.contrib.postgres.constraints.ExclusionConstraint.index_type\">\n<span class=\"sig-prename descclassname\">ExclusionConstraint.</span><span class=\"sig-name descname\">index_type</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.constraints.ExclusionConstraint.index_type\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Indextypen för begränsningen. Accepterade värden är <code class=\"docutils literal notranslate\">GIST</code> eller <code class=\"docutils literal notranslate\">SPGIST</code>. Matchningen är okänslig för skiftlägesskillnader. Om det inte anges är standardindextypen <code class=\"docutils literal notranslate\">GIST</code>.</p>\n</section>\n<section id=\"condition\">\n<h3><code class=\"docutils literal notranslate\">villkor</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.contrib.postgres.constraints.ExclusionConstraint.condition\">\n<span class=\"sig-prename descclassname\">ExclusionConstraint.</span><span class=\"sig-name descname\">condition</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.constraints.ExclusionConstraint.condition\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ett <a class=\"reference internal\" href=\"/sv/6.0/ref/models/querysets/#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\">Q</code></a>-objekt som anger villkoret för att begränsa en begränsning till en delmängd av rader. Till exempel:, <code class=\"docutils literal notranslate\">condition=Q(cancelled=False)</code>.</p>\n<p>Dessa villkor har samma databasrestriktioner som <a class=\"reference internal\" href=\"/sv/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\">django.db.models.Index.condition</code></a>.</p>\n</section>\n<section id=\"deferrable\">\n<h3><code class=\"docutils literal notranslate\">deferrable</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.contrib.postgres.constraints.ExclusionConstraint.deferrable\">\n<span class=\"sig-prename descclassname\">ExclusionConstraint.</span><span class=\"sig-name descname\">deferrable</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.constraints.ExclusionConstraint.deferrable\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ange denna parameter för att skapa en uppskjutbar uteslutningsbegränsning. Accepterade värden är <code class=\"docutils literal notranslate\">Deferrable.DEFERRED</code> eller <code class=\"docutils literal notranslate\">Deferrable.IMMEDIATE</code>. Till exempel:</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=\"nn\">django.contrib.postgres.constraints</span> <span class=\"kn\">import</span> ExclusionConstraint\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"kn\">import</span> RangeOperators\n<span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Deferrable\n\nExclusionConstraint<span class=\"p\">(</span>\n    name<span class=\"o\">=</span><span class=\"s2\">&quot;exclude_overlapping_deferred&quot;</span><span class=\"p\">,</span>\n    expressions<span class=\"o\">=</span><span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;timespan&quot;</span><span class=\"p\">,</span> RangeOperators<span class=\"o\">.</span>OVERLAPS<span class=\"p\">),</span>\n    <span class=\"p\">],</span>\n    deferrable<span class=\"o\">=</span>Deferrable<span class=\"o\">.</span>DEFERRED<span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Som standard är begränsningar inte uppskjutna. En uppskjuten begränsning kommer inte att verkställas förrän i slutet av transaktionen. En omedelbar begränsning kommer att verkställas omedelbart efter varje kommando.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Uppskjutna uteslutningsbegränsningar kan leda till en ”prestandaförlust” &lt;<a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-createtable.html#id-1.9.3.85.9.4\">https://www.postgresql.org/docs/current/sql-createtable.html#id-1.9.3.85.9.4</a>&gt;`_.</p>\n</aside>\n</section>\n<section id=\"include\">\n<h3><code class=\"docutils literal notranslate\">inkludera</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.contrib.postgres.constraints.ExclusionConstraint.include\">\n<span class=\"sig-prename descclassname\">ExclusionConstraint.</span><span class=\"sig-name descname\">include</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.constraints.ExclusionConstraint.include\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>En lista eller tupel med namnen på de fält som ska ingå i det täckande uteslutningsvillkoret som icke-nyckelkolumner. Detta gör det möjligt att använda skanningar med enbart index för frågor som endast väljer inkluderade fält (<a class=\"reference internal\" href=\"#django.contrib.postgres.constraints.ExclusionConstraint.include\" title=\"django.contrib.postgres.constraints.ExclusionConstraint.include\"><code class=\"xref py py-attr docutils literal notranslate\">include</code></a>) och endast filtrerar efter indexerade fält (<a class=\"reference internal\" href=\"#django.contrib.postgres.constraints.ExclusionConstraint.expressions\" title=\"django.contrib.postgres.constraints.ExclusionConstraint.expressions\"><code class=\"xref py py-attr docutils literal notranslate\">expressions</code></a>).</p>\n<p><code class=\"docutils literal notranslate\">include</code> stöds för GiST-index. PostgreSQL 14+ stöder också <code class=\"docutils literal notranslate\">include</code> för SP-GiST-index.</p>\n</section>\n<section id=\"violation-error-code\">\n<h3><code class=\"docutils literal notranslate\">Felkod för överträdelse</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.contrib.postgres.constraints.ExclusionConstraint.violation_error_code\">\n<span class=\"sig-prename descclassname\">ExclusionConstraint.</span><span class=\"sig-name descname\">violation_error_code</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.constraints.ExclusionConstraint.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>Den felkod som används när <code class=\"docutils literal notranslate\">ValidationError</code> uppstår under <a class=\"reference internal\" href=\"/sv/6.0/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">modellvalidering</span></a>. Standardvärdet är <code class=\"docutils literal notranslate\">None</code>.</p>\n</section>\n<section id=\"violation-error-message\">\n<h3><code class=\"docutils literal notranslate\">avvikelse_felmeddelande</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<p>Det felmeddelande som används när <code class=\"docutils literal notranslate\">ValidationError</code> uppstår under <a class=\"reference internal\" href=\"/sv/6.0/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">modellvalidering</span></a>. Standardvärdet är <a class=\"reference internal\" href=\"/sv/6.0/ref/models/constraints/#django.db.models.BaseConstraint.violation_error_message\" title=\"django.db.models.BaseConstraint.violation_error_message\"><code class=\"xref py py-attr docutils literal notranslate\">BaseConstraint.violation_error_message</code></a>.</p>\n</section>\n<section id=\"examples\">\n<h3>Exempel<a class=\"heading-anchor\" href=\"#examples\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Följande exempel begränsar överlappande bokningar i samma rum, utan att ta hänsyn till avbokade bokningar:</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=\"nn\">django.contrib.postgres.constraints</span> <span class=\"kn\">import</span> ExclusionConstraint\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"kn\">import</span> DateTimeRangeField<span class=\"p\">,</span> RangeOperators\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Q\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Room</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    number <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Reservation</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    room <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span><span class=\"s2\">&quot;Room&quot;</span><span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    timespan <span class=\"o\">=</span> DateTimeRangeField<span class=\"p\">()</span>\n    cancelled <span class=\"o\">=</span> models<span class=\"o\">.</span>BooleanField<span class=\"p\">(</span>default<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        constraints <span class=\"o\">=</span> <span class=\"p\">[</span>\n            ExclusionConstraint<span class=\"p\">(</span>\n                name<span class=\"o\">=</span><span class=\"s2\">&quot;exclude_overlapping_reservations&quot;</span><span class=\"p\">,</span>\n                expressions<span class=\"o\">=</span><span class=\"p\">[</span>\n                    <span class=\"p\">(</span><span class=\"s2\">&quot;timespan&quot;</span><span class=\"p\">,</span> RangeOperators<span class=\"o\">.</span>OVERLAPS<span class=\"p\">),</span>\n                    <span class=\"p\">(</span><span class=\"s2\">&quot;room&quot;</span><span class=\"p\">,</span> RangeOperators<span class=\"o\">.</span>EQUAL<span class=\"p\">),</span>\n                <span class=\"p\">],</span>\n                condition<span class=\"o\">=</span>Q<span class=\"p\">(</span>cancelled<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">),</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">]</span>\n</code></pre></div>\n<p>Om din modell definierar ett intervall med två fält, istället för de ursprungliga PostgreSQL-intervalltyperna, bör du skriva ett uttryck som använder motsvarande funktion (t.ex. `` TsTzRange() <code class=\"docutils literal notranslate\">) och använda avgränsarna för fältet. Oftast kommer avgränsarna att vara ``'[)'</code>, vilket innebär att den nedre gränsen är inkluderande och den övre gränsen är exkluderande. Du kan använda <a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/postgres/fields/#django.contrib.postgres.fields.RangeBoundary\" title=\"django.contrib.postgres.fields.RangeBoundary\"><code class=\"xref py py-class docutils literal notranslate\">RangeBoundary</code></a> som tillhandahåller en uttrycksmappning för <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/rangetypes.html#RANGETYPES-INCLUSIVITY\">intervallgränserna</a>. Till exempel:</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=\"nn\">django.contrib.postgres.constraints</span> <span class=\"kn\">import</span> ExclusionConstraint\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"kn\">import</span> <span class=\"p\">(</span>\n    DateTimeRangeField<span class=\"p\">,</span>\n    RangeBoundary<span class=\"p\">,</span>\n    RangeOperators<span class=\"p\">,</span>\n<span class=\"p\">)</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Func<span class=\"p\">,</span> Q\n\n\n<span class=\"k\">class</span> <span class=\"nc\">TsTzRange</span><span class=\"p\">(</span>Func<span class=\"p\">):</span>\n    function <span class=\"o\">=</span> <span class=\"s2\">&quot;TSTZRANGE&quot;</span>\n    output_field <span class=\"o\">=</span> DateTimeRangeField<span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Reservation</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    room <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span><span class=\"s2\">&quot;Room&quot;</span><span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    start <span class=\"o\">=</span> models<span class=\"o\">.</span>DateTimeField<span class=\"p\">()</span>\n    end <span class=\"o\">=</span> models<span class=\"o\">.</span>DateTimeField<span class=\"p\">()</span>\n    cancelled <span class=\"o\">=</span> models<span class=\"o\">.</span>BooleanField<span class=\"p\">(</span>default<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        constraints <span class=\"o\">=</span> <span class=\"p\">[</span>\n            ExclusionConstraint<span class=\"p\">(</span>\n                name<span class=\"o\">=</span><span class=\"s2\">&quot;exclude_overlapping_reservations&quot;</span><span class=\"p\">,</span>\n                expressions<span class=\"o\">=</span><span class=\"p\">[</span>\n                    <span class=\"p\">(</span>\n                        TsTzRange<span class=\"p\">(</span><span class=\"s2\">&quot;start&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;end&quot;</span><span class=\"p\">,</span> RangeBoundary<span class=\"p\">()),</span>\n                        RangeOperators<span class=\"o\">.</span>OVERLAPS<span class=\"p\">,</span>\n                    <span class=\"p\">),</span>\n                    <span class=\"p\">(</span><span class=\"s2\">&quot;room&quot;</span><span class=\"p\">,</span> RangeOperators<span class=\"o\">.</span>EQUAL<span class=\"p\">),</span>\n                <span class=\"p\">],</span>\n                condition<span class=\"o\">=</span>Q<span class=\"p\">(</span>cancelled<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">),</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">]</span>\n</code></pre></div>\n</section>\n</section>","rootId":"module-django.contrib.postgres.constraints","toc":[{"title":"Uteslutningsbegränsning","anchor":"exclusionconstraint","children":[{"title":"namn","anchor":"name","children":[]},{"title":"uttryck","anchor":"expressions","children":[]},{"title":"index_typ","anchor":"index-type","children":[]},{"title":"villkor","anchor":"condition","children":[]},{"title":"deferrable","anchor":"deferrable","children":[]},{"title":"inkludera","anchor":"include","children":[]},{"title":"Felkod för överträdelse","anchor":"violation-error-code","children":[]},{"title":"avvikelse_felmeddelande","anchor":"violation-error-message","children":[]},{"title":"Exempel","anchor":"examples","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API-referens","url":"/sv/6.0/ref/"},{"docname":"ref/contrib/index","title":"contrib paket","url":"/sv/6.0/ref/contrib/"},{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/sv/6.0/ref/contrib/postgres/"}],"prev":{"docname":"ref/contrib/postgres/aggregates","title":"PostgreSQL-specifika aggregeringsfunktioner","url":"/sv/6.0/ref/contrib/postgres/aggregates/"},"next":{"docname":"ref/contrib/postgres/expressions","title":"PostgreSQL-specifika frågeuttryck","url":"/sv/6.0/ref/contrib/postgres/expressions/"},"formats":{"html":"/sv/6.0/ref/contrib/postgres/constraints/","markdown":"/sv/6.0/ref/contrib/postgres/constraints.md","json":"/sv/6.0/ref/contrib/postgres/constraints.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/contrib/postgres/constraints.txt","official":"https://docs.djangoproject.com/sv/6.0/ref/contrib/postgres/constraints/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}