123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- =====================
- Constraints reference
- =====================
- .. module:: django.db.models.constraints
- .. currentmodule:: django.db.models
- .. versionadded:: 2.2
- The classes defined in this module create database constraints. They are added
- in the model :attr:`Meta.constraints <django.db.models.Options.constraints>`
- option.
- .. admonition:: Referencing built-in constraints
- Constraints are defined in ``django.db.models.constraints``, but for
- convenience they're imported into :mod:`django.db.models`. The standard
- convention is to use ``from django.db import models`` and refer to the
- constraints as ``models.<Foo>Constraint``.
- .. admonition:: 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
- :attr:`Meta.constraints <django.db.models.Options.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.
- .. admonition:: 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 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``
- ---------
- .. attribute:: CheckConstraint.check
- A :class:`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``
- --------
- .. attribute:: CheckConstraint.name
- The name of the constraint.
- ``UniqueConstraint``
- ====================
- .. class:: UniqueConstraint(*, fields, name, condition=None)
- Creates a unique constraint in the database.
- ``fields``
- ----------
- .. attribute:: 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``
- --------
- .. attribute:: UniqueConstraint.name
- The name of the constraint.
- ``condition``
- -------------
- .. attribute:: UniqueConstraint.condition
- A :class:`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
- :attr:`Index.condition`.
|