制約リファレンス—Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/2.2.x/ref/models/constraints
移動先:案内検索

制約リファレンス

バージョン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()の間に not チェックされ、ValidationErrorを上げません。 むしろ、save()でデータベース整合性エラーが発生します。 条件なしのUniqueConstraint s (つまり、 非部分的な一意の制約)は、既存のvalidate_unique()ロジックを活用するため、2段階の検証が可能になるという点で異なります。 save()IntegrityErrorに加えて、UniqueConstraintに違反した場合、モデル検証中にValidationErrorも発生します。


CheckConstraint

class CheckConstraint(*, check, name)
データベースにチェック制約を作成します。

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)
データベースに一意の制約を作成します。

fields

UniqueConstraint.fields

制約を適用する一意の列のセットを指定するフィールド名のリスト。

たとえば、UniqueConstraint(fields=['room', 'date'], name='unique_booking')は、各部屋を各日付に1回だけ予約できるようにします。


name

UniqueConstraint.name

制約の名前。


condition

UniqueConstraint.condition

制約を適用する条件を指定する Q オブジェクト。

例えば:

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

各ユーザーがドラフトを1つだけ持つようにします。

これらの条件には、 Index.condition と同じデータベース制限があります。