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
Skapar en unik begränsning i databasen.
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.
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.