Srianta bunachar sonraí sonracha PostgreSQLLink to this heading

Tacaíonn PostgreSQL le srianta breise sláine sonraí atá ar fáil ón modúl ``django.contrib.postgres.restricints'. <django.db.models.Options.constraints>Cuirtear iad leis sa rogha samhail: attr: `Meta.Constraints `.

Srianadh eisiaimLink to this heading

class ExclusionConstraint(*, name, expressions, index_type=None, condition=None, deferrable=None, include=None, violation_error_code=None, violation_error_message=None)Link to this definition

Cruthaíonn sé srian eisiaimh sa bhunachar sonraí. Go hinmheánach, cuireann PostgreSQL srianta eisiaimh i bhfeidhm ag úsáid innéacsanna. < https://www.postgresql.org/docs/current/gist.html>Is é Gist `_ an cineál innéacs réamhshocraithe. < https://www.postgresql.org/docs/current/btree-gist.html>Chun iad a úsáid, ní mór duit an síneadh `btree_gist `_ a ghníomhachtú ar PostgreSQL. Is féidir leat é a shuiteáil ag baint úsáide as an oibríocht imirce:class: `~django.contrib.postgres.operations.btreegistExtension.

Má dhéanann tú iarracht sraith nua a chur isteach a dhéanann coinbhleacht leis an tsraith atá ann cheana, ardaítear an:exc: ~django.db.IntegrityError. Ar an gcaoi chéanna, nuair a nuashonraítear coinbhleachtaí le sraith

<validating-objects>Déantar srianta eisiaimh a sheiceáil le linn an: ref: `bailíochtú samhail `.

``ainm `Link to this heading

ExclusionConstraint.nameLink to this definition

Féach: attr: .baseConstraint.name.

léiritheachLink to this heading

ExclusionConstraint.expressionsLink to this definition

Athraitheach de 2-tuples. Is é an chéad eilimint ná abairt nó sreang. Is é an dara gné ná oibreoir SQL a léirítear mar shreang. Chun clóscríobh a sheachaint, is féidir leat: class: ~django.contrib.postgres.fields.rangeOperators a mhéapálann na hoibreoirí le teaghráin. Mar shampla:

Code
expressions = [
    ("timespan", RangeOperators.ADJACENT_TO),
    (F("room"), RangeOperators.EQUAL),
]

Is féidir an abairt: class: `op <django.contrib.postgres.indexes.OpClass>Class () `a úsáid chun `aicme oibreora `_ saincheaptha a shonrú do na nathanna srianta. Mar shampla:

Code
expressions = [
    (OpClass("circle", name="circle_ops"), RangeOperators.OVERLAPS),
]

cruthaíonn srian eisiaimh ar circle ag baint úsáide as circle_ops.

cineál_innéacsaLink to this heading

ExclusionConstraint.index_typeLink to this definition

Cineál innéacs an srianta. Is iad na luachanna a nglactar leo ná GISTSPGIST. Tá an meaitseáil neamh-íogair. Mura gcuirtear ar fáil, is é `GIST ``an cineál innéacs réamhshocraithe.

coinníollLink to this heading

ExclusionConstraint.conditionLink to this definition

A: Aicme: ~Django.db.Models.q réad a shonraíonn an coinníoll chun srian a shrianadh le fo-thacar sraitheanna. Mar shampla, ``Condition=Q (cealaithe = bréagach) ``.

Tá na srianta bunachar sonraí céanna ag na coinníollacha seo las:attr: django.db.models.index.condition.

iarchurraitheLink to this heading

ExclusionConstraint.deferrableLink to this definition

Socraigh an paraiméadar seo chun srian eisiaimh in-iarchurtha a chruthú. Is iad na luachanna a nglactar leo ná Deferrable.FerredDeferrable.Immediate. Mar shampla:

Code
from django.contrib.postgres.constraints import ExclusionConstraint
from django.contrib.postgres.fields import RangeOperators
from django.db.models import Deferrable

ExclusionConstraint(
    name="exclude_overlapping_deferred",
    expressions=[
        ("timespan", RangeOperators.OVERLAPS),
    ],
    deferrable=Deferrable.DEFERRED,
)

De réir réamhshocraithe ní chuirtear srianta ar iarchur. Ní chuirfear srian iarchurtha i bhfeidhm go dtí deireadh an idirbheart. Cuirfear srian láithreach i bhfeidhm díreach tar éis gach ordaithe.

``san áireamh ``Link to this heading

ExclusionConstraint.includeLink to this definition

Liosta nó tuipéar d'ainmneacha na réimsí atá le cur san áireamh sa srian eisiaimh clúdaigh mar cholúin neamh-lárnacha. Ligeann sé seo scananna innéacs amháin a úsáid le haghaidh ceisteanna nach roghnaíonn ach réimsí san áireamh (:attr: ~ExclusionConstraint.include) agus ní scagann ach amháin de réir réimsí innéacsaithe (:attr: ~ExclusionConstraint.Expressions).

Tacaítear le include d'innéacsanna GiST. Tacaíonn PostgreSQL 14+ le include le haghaidh innéacsanna SP-Gist freisin.

``cód_earráid_shárú `Link to this heading

ExclusionConstraint.violation_error_codeLink to this definition

<validating-objects>An cód earráide a úsáidtear nuair a ardaítear ValidationError trí:ref: bailíochtú samhail `. Réamhshocraithe go ``None`.

``teachtaireachtaí earráid_shárúcháin ``Link to this heading

<validating-objects>An teachtaireacht earráide a úsáidtear nuair a ardaítear ValidationError trí:ref: bailíochtú samhail `. Réamhshocraithe to:attr: `.baseConstraint.VIOLATION_ERROR_MESSAGE.

SamplaíLink to this heading

Cuireann an sampla seo a leanas srian ar áirithintí forluí sa seomra céanna, gan áirithintí cealaithe a chur san áireamh:

Code
from django.contrib.postgres.constraints import ExclusionConstraint
from django.contrib.postgres.fields import DateTimeRangeField, RangeOperators
from django.db import models
from django.db.models import Q


class Room(models.Model):
    number = models.IntegerField()


class Reservation(models.Model):
    room = models.ForeignKey("Room", on_delete=models.CASCADE)
    timespan = DateTimeRangeField()
    cancelled = models.BooleanField(default=False)

    class Meta:
        constraints = [
            ExclusionConstraint(
                name="exclude_overlapping_reservations",
                expressions=[
                    ("timespan", RangeOperators.OVERLAPS),
                    ("room", RangeOperators.EQUAL),
                ],
                condition=Q(cancelled=False),
            ),
        ]

Sa chás go sainmhíníonn do mhúnla raon ag baint úsáide as dhá réimse, in ionad na cineálacha raon dúchasacha PostgreSQL, ba cheart duit abairt a scríobh a úsáideann an fheidhm choibhéiseach (m.sh. TstzRange () `), agus na teorannaithe a úsáid don réimse. Is minic a bheidh na teorannaitheoirí ná ``'[) ', rud a chiallaíonn go bhfuil an teorainn íochtarach cuimsitheach agus go bhfuil an teorainn uachtarach eisiach. < https://www.postgresql.org/docs/ current/rangetypes.html #RANGETYPES -INCLUSIVITY>Is féidir leat an: class: ~django.contrib.postgres.fields.rangeBoundary a sholáthraíonn léarscáil abairt do na `teorainneacha raon `_ a úsáid. Mar shampla:

Code
from django.contrib.postgres.constraints import ExclusionConstraint
from django.contrib.postgres.fields import (
    DateTimeRangeField,
    RangeBoundary,
    RangeOperators,
)
from django.db import models
from django.db.models import Func, Q


class TsTzRange(Func):
    function = "TSTZRANGE"
    output_field = DateTimeRangeField()


class Reservation(models.Model):
    room = models.ForeignKey("Room", on_delete=models.CASCADE)
    start = models.DateTimeField()
    end = models.DateTimeField()
    cancelled = models.BooleanField(default=False)

    class Meta:
        constraints = [
            ExclusionConstraint(
                name="exclude_overlapping_reservations",
                expressions=[
                    (
                        TsTzRange("start", "end", RangeBoundary()),
                        RangeOperators.OVERLAPS,
                    ),
                    ("room", RangeOperators.EQUAL),
                ],
                condition=Q(cancelled=False),
            ),
        ]