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()ochvalidate().
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:
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=None, 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:
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:
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:
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:
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:
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:
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:
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.
Unika begränsningar med nulls_distinct ignoreras för databaser förutom PostgreSQL 15+.
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.