Referens för begränsningarLink to this heading

Klasserna som definieras i den här modulen skapar databasbegränsningar. De läggs till i modellens Meta.constraints alternativ.

BaseConstraintLink to this heading

class BaseConstraint(*name, violation_error_code=None, violation_error_message=None)Link to this definition

Basklass för alla begränsningar. Underklasser måste implementera metoderna constraint_sql(), create_sql(), remove_sql() och validate().

Alla begränsningar har följande parametrar gemensamt:

namnLink to this heading

BaseConstraint.nameLink to this definition

Namnet på begränsningen. Du måste alltid ange ett unikt namn för begränsningen.

Felkod för överträdelseLink to this heading

BaseConstraint.violation_error_codeLink to this definition

Den felkod som används när ValidationError uppstår under modellvalidering. Standardvärdet är None.

avvikelse_felmeddelandeLink to this heading

BaseConstraint.violation_error_messageLink to this definition

Det felmeddelande som används när ValidationError uppstår under modellvalidering. Standard är "Begränsningen "%(name)s" har brutits.".

validate()Link to this heading

BaseConstraint.validate(model, instance, exclude=None, using=DEFAULT_DB_ALIAS)Link to this definition

Validerar att begränsningen, som definierats i model, respekteras i instance. Detta innebär att en databasfråga görs för att säkerställa att begränsningen respekteras. Om fält i listan exclude behövs för att validera begränsningen ignoreras begränsningen.

Ger upphov till ett ValidationError om begränsningen inte uppfylls.

Denna metod måste implementeras av en subklass.

CheckConstraintLink to this heading

class CheckConstraint(*, condition, name, violation_error_code=None, violation_error_message=None)Link to this definition

Skapar en kontrollbegränsning i databasen.

villkorLink to this heading

CheckConstraint.conditionLink to this definition

Ett Q-objekt eller boolean Expression som anger den villkorliga kontroll som du vill att begränsningen ska genomdriva.

Till exempel:

Code
CheckConstraint(condition=Q(age__gte=18), name="age_gte_18")

säkerställer att åldersfältet aldrig är mindre än 18.

Unik begränsningLink to this heading

class UniqueConstraint(*expressions, fields=(), name, condition=None, deferrable=None, include=None, opclasses=(), nulls_distinct=None, violation_error_code=None, violation_error_message=None)Link to this definition

Creates a uniqueness guarantee in the database, enforced by either a unique constraint or a unique index depending on the options used.

uttryckLink to this heading

UniqueConstraint.expressionsLink to this definition

Det positionella argumentet *expressions gör det möjligt att skapa funktionella unika begränsningar för uttryck och databasfunktioner.

Till exempel:

Code
UniqueConstraint(Lower("name").desc(), "category", name="unique_lower_name_category")

skapar en unik begränsning på det gemena värdet i fältet name i fallande ordning och fältet category i stigande ordning som standard.

Funktionella unika begränsningar har samma databasrestriktioner som Index.expressions.

fältLink to this heading

UniqueConstraint.fieldsLink to this definition

En lista med fältnamn som anger den unika uppsättning kolumner som du vill att begränsningen ska genomdriva.

Till exempel:

Code
UniqueConstraint(fields=["room", "date"], name="unique_booking")

säkerställer att varje rum endast kan bokas en gång per datum.

villkorLink to this heading

UniqueConstraint.conditionLink to this definition

Ett Q-objekt som anger det villkor du vill att begränsningen ska genomdriva.

Till exempel:

Code
UniqueConstraint(fields=["user"], condition=Q(status="DRAFT"), name="unique_draft_user")

säkerställer att varje användare endast har ett utkast.

Dessa villkor har samma databasrestriktioner som Index.condition.

deferrableLink to this heading

UniqueConstraint.deferrableLink to this definition

Ange denna parameter för att skapa en uppskjutbar unik begränsning. Accepterade värden är Deferrable.DEFERRED eller Deferrable.IMMEDIATE. Till exempel:

Code
from django.db.models import Deferrable, UniqueConstraint

UniqueConstraint(
    name="unique_order",
    fields=["order"],
    deferrable=Deferrable.DEFERRED,
)

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.

Unique constraints with condition, include, opclasses, or expressions may be implemented as unique indexes rather than unique constraints. In that case, deferrable cannot be set.

inkluderaLink to this heading

UniqueConstraint.includeLink to this definition

En lista eller tupel med namnen på de fält som ska ingå i det täckande unika indexet som icke-nyckelkolumner. På så sätt kan skanningar med enbart index användas för frågor som endast väljer inkluderade fält (include) och endast filtrerar efter unika fält (fields).

Till exempel:

Code
UniqueConstraint(name="unique_booking", fields=["room", "date"], include=["full_name"])

tillåter filtrering på rum och datum, även val av full_name, samtidigt som data endast hämtas från indexet.

Unika begränsningar med kolumner som inte är nycklar ignoreras för databaser förutom PostgreSQL.

Icke-nyckelkolumner har samma databasrestriktioner som Index.include.

opklasserLink to this heading

UniqueConstraint.opclassesLink to this definition

Namnen på PostgreSQL-operatörsklasserna som ska användas för detta unika index. Om du behöver en anpassad operatörsklass måste du tillhandahålla en för varje fält i indexet.

Till exempel:

Code
UniqueConstraint(
    name="unique_username", fields=["username"], opclasses=["varchar_pattern_ops"]
)

skapar ett unikt index på username med hjälp av varchar_pattern_ops.

`` Opclasses`` ignoreras för databaser förutom PostgreSQL.

nulls_distinctLink to this heading

UniqueConstraint.nulls_distinctLink to this definition

Om rader som innehåller NULL-värden som omfattas av det unika villkoret ska anses vara skilda från varandra. Standardvärdet är None som använder databasens standardvärde som är True på de flesta backends.

Till exempel:

Code
UniqueConstraint(name="ordering", fields=["ordering"], nulls_distinct=False)

skapar en unik begränsning som endast tillåter en rad att lagra ett NULL-värde i kolumnen ordering.

Unique constraints with nulls_distinct are ignored for databases besides PostgreSQL.

Felkod för överträdelseLink to this heading

UniqueConstraint.violation_error_codeLink to this definition

Den felkod som används när ett ValidationError uppstår under modellvalidering.

Standardvärdet är BaseConstraint.violation_error_code, när antingen UniqueConstraint.condition har angetts eller UniqueConstraint.fields inte har angetts.

Om UniqueConstraint.fields anges utan UniqueConstraint.condition, används som standard felkoden Meta.unique_together när det finns flera fält, och felkoden Field.unique när det finns ett enda fält.

avvikelse_felmeddelandeLink to this heading

UniqueConstraint.violation_error_messageLink to this definition

Det felmeddelande som används när ett ValidationError uppstår under modellvalidering.

Standardvärdet är BaseConstraint.violation_error_message, när antingen UniqueConstraint.condition har angetts eller UniqueConstraint.fields inte har angetts.

Om UniqueConstraint.fields anges utan UniqueConstraint.condition, används som standard felmeddelandet Meta.unique_together när det finns flera fält, och felmeddelandet Field.unique när det finns ett enda fält.