Constraints reference

New in Django 2.2:

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.

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)[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') ensures that each user only has one draft.

These conditions have the same database restrictions as Index.condition.