Django ref models constraints ¶
See also
Contents
description ¶
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. To work around name collisions, part of the
name may contain
'%(app_label)s'
and
'%(class)s'
, which are
replaced, respectively, by the lowercased app label and class name of the
concrete model. For example
CheckConstraint(check=Q(age__gte=18),
name='%(app_label)s_%(class)s_is_adult')
.
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 ) ¶
-
Creates a check constraint in the database.
check
¶
- CheckConstraint. check ¶
A
Q
object or boolean
Expression
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.
Changed in version 3.1:
Support for boolean
Expression
was added.
name
¶
- CheckConstraint. name ¶
The name of the constraint.
Changed in version 3.0:
Interpolation of
'%(app_label)s'
and
'%(class)s'
was added.
UniqueConstraint
¶
- class UniqueConstraint ( * , fields , name , condition = None ) ¶
-
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.
Changed in version 3.0:
Interpolation of
'%(app_label)s'
and
'%(class)s'
was added.
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
.