The classes defined in this module create database constraints. They are added in the model Meta.constraints
option.
Referencing built-in constraints
Constraints are defined in django.db.models.constraints
, but for convenience they’re imported into django.db.models
. The standard convention is to use from django.db import models
and refer to the constraints as models.<Foo>Constraint
.
Constraints in abstract base classes
You must always specify a unique name for the constraint. As such, you cannot normally specify a constraint on an abstract base class, since the Meta.constraints
option is inherited by subclasses, with exactly the same values for the attributes (including name
) each time. Instead, specify the constraints
option on subclasses directly, providing a unique name for each constraint.
Validation of Constraints
In general constraints are not checked during full_clean()
, and do not raise ValidationError
s. Rather you’ll get a database integrity error on save()
. UniqueConstraint
s without a condition
(i.e. non-partial unique constraints) are different in this regard, in that they leverage the existing validate_unique()
logic, and thus enable two-stage validation. In addition to IntegrityError
on save()
, ValidationError
is also raised during model validation when the UniqueConstraint
is violated.
CheckConstraint
class CheckConstraint(*, check, name)
[source]
Creates a check constraint in the database.
check
CheckConstraint.check
A Q
object that specifies the check you want the constraint to enforce.
For example, CheckConstraint(check=Q(age__gte=18), name='age_gte_18')
ensures the age field is never less than 18.
name
CheckConstraint.name
The name of the constraint.
UniqueConstraint
class UniqueConstraint(*, fields, name, condition=None)
[source]
Creates a unique constraint in the database.
fields
UniqueConstraint.fields
A list of field names that specifies the unique set of columns you want the constraint to enforce.
For example, UniqueConstraint(fields=['room', 'date'],
name='unique_booking')
ensures each room can only be booked once for each date.
name
UniqueConstraint.name
The name of the constraint.
condition
UniqueConstraint.condition
A Q
object that specifies the condition you want the constraint to enforce.
For example:
UniqueConstraint(fields=['user'], condition=Q(status='DRAFT'), name='unique_draft_user')
ensures that each user only has one draft.
These conditions have the same database restrictions as Index.condition
.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/2.2/ref/models/constraints/