Spec-Zone.ru › Django 2.2

Справочник ограничений

Новое в Django 2.2.

Классы, определенные в этом модуле, создают ограничения базы данных. Они добавляются в опцию модели Meta.constraints.

Обращение к встроенным ограничениям

Ограничения определены в django.db.models.constraints, но для удобства они импортированы в django.db.models. Стандартная конвенция — использовать from django.db import models и ссылаться на ограничения как на models.<Foo>Constraint.

Ограничения в абстрактных базовых классах

Вы всегда должны указать уникальное имя для ограничения. Поэтому вы обычно не можете указать ограничение на абстрактном базовом классе, поскольку опция Meta.constraints наследуется подклассами, с тождественными значениями атрибутов (включая name) каждый раз. Вместо этого укажите опцию constraints непосредственно в подклассах, присваивая уникальное имя каждому ограничению.

Проверка ограничений

В целом, ограничения не проверяются во время full_clean(), и не вызывают ValidationError. Вместо этого вы получите ошибку целостности базы данных при save(). UniqueConstraint без condition (то есть ограничения уникальности без частичного условия) отличаются в этом отношении, так как они используют существующую логику validate_unique(), а, следовательно, обеспечивают двухэтапную проверку. В дополнение к IntegrityError на save(), ValidationError также возникает во время проверки модели, когда нарушается UniqueConstraint.

CheckConstraint

class CheckConstraint(*, check, name) [source]

Создает ограничение проверки в базе данных.

check

CheckConstraint.check

Объект Q, который определяет проверку, которую должно обеспечивать ограничение.

Например, CheckConstraint(check=Q(age__gte=18), name='age_gte_18') гарантирует, что поле возраста никогда не будет меньше 18.

name

CheckConstraint.name

Имя ограничения.

UniqueConstraint

class UniqueConstraint(*, fields, name, condition=None) [source]

Создает ограничение уникальности в базе данных.

fields

UniqueConstraint.fields

Список имён полей, которые определяют уникальный набор столбцов, которые должно обеспечивать ограничение.

Например, UniqueConstraint(fields=['room', 'date'], name='unique_booking') гарантирует, что каждый номер комнаты может быть забронирован только один раз для каждой даты.

name

UniqueConstraint.name

Имя ограничения.

condition

UniqueConstraint.condition

Объект Q, который определяет условие, которое должно обеспечивать ограничение.

Например:

UniqueConstraint(fields=['user'], condition=Q(status='DRAFT'), name='unique_draft_user')

гарантирует, что каждый пользователь имеет только один черновик.

Эти условия имеют те же ограничения базы данных, что и Index.condition.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/2.2/ref/models/constraints/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API