制約 (Constraint) リファレンスLink to this heading
このモジュールで定義されたクラスはデータベース制約を作成します。これらはモデルの Meta.constraints オプションで追加されます。
BaseConstraintLink to this heading
- class BaseConstraint(*name, violation_error_code=None, violation_error_message=None)Link to this definition
すべての制約の基底クラスです。サブクラスは
constraint_sql(),create_sql(),remove_sql(),validate()メソッドを実装しなければなりません。
すべての制約 (constraint) に共通するパラメータは以下の通りです:
nameLink to this heading
- BaseConstraint.nameLink to this definition
制約の名前。制約には常に一意な名前を指定する必要があります。
violation_error_codeLink to this heading
- BaseConstraint.violation_error_codeLink to this definition
モデルのバリデーション 中に ValidationError が発生した場合に使用されるエラーコードです。デフォルトは None です。
violation_error_messageLink to this heading
- BaseConstraint.violation_error_messageLink to this definition
モデルのバリデーション の実行中に ValidationError が発生した場合に表示されるエラーメッセージです。デフォルトは "Constraint "%(name)s" is violated." です。
validate()Link to this heading
- BaseConstraint.validate(model, instance, exclude=None, using=DEFAULT_DB_ALIAS)Link to this definition
モデル model で定義された制約がインスタンス instance で守られているかどうかを検証します。これは、制約が守られていることを確認するために、データベースに対してクエリを実行します。制約を検証するために exclude リストのフィールドが必要な場合、制約は無視されます。
制約に違反した場合は ValidationError を発生させます。
このメソッドはサブクラスで実装する必要があります。
CheckConstraintLink to this heading
- class CheckConstraint(*, condition, name, violation_error_code=None, violation_error_message=None)Link to this definition
データベースにチェック制約を作成します。
conditionLink to this heading
- CheckConstraint.conditionLink to this definition
制約が強制する条件チェックを指定する Q オブジェクトまたは真偽値の Expression です。
例:
CheckConstraint(condition=Q(age__gte=18), name="age_gte_18")
年齢フィールドが18未満にならないことを保証します。
UniqueConstraintLink to this heading
- class UniqueConstraint(*expressions, fields=(), name=None, condition=None, deferrable=None, include=None, opclasses=(), nulls_distinct=None, violation_error_code=None, violation_error_message=None)Link to this definition
データベースにユニーク制約(一意性制約)を作成します。
expressionsLink to this heading
- UniqueConstraint.expressionsLink to this definition
位置引数 *expressions により、式やデータベース関数に対する関数的なユニーク制約を作成できます。
例:
UniqueConstraint(Lower("name").desc(), "category", name="unique_lower_name_category")
これは name フィールドの小文字の値を降順で、category フィールドの値をデフォルトの昇順でユニーク制約を作成します。
関数的なユニーク制約は Index.expressions と同じデータベース制約を持ちます。
fieldsLink to this heading
- UniqueConstraint.fieldsLink to this definition
制約を適用したい一意な列のセットを表すフィールド名のリスト。
例:
UniqueConstraint(fields=["room", "date"], name="unique_booking")
それぞれの部屋がそれぞれの日付で1度だけ予約できることを保証します。
conditionLink to this heading
- UniqueConstraint.conditionLink to this definition
制約を適用したい条件を指定する Q オブジェクト。
例:
UniqueConstraint(fields=["user"], condition=Q(status="DRAFT"), name="unique_draft_user")
これは、各ユーザーが1つの DRAFT しか持たないことを保証します。
これらの condition は Index.condition と同じデータベースの制限を持ちます。
deferrableLink to this heading
- UniqueConstraint.deferrableLink to this definition
このパラメータを指定すると、遅延可能なユニーク制約を作成できます。使用可能な値は Deferrable.DEFERRED または Deferrable.IMMEDIATE です。例えば:
from django.db.models import Deferrable, UniqueConstraint
UniqueConstraint(
name="unique_order",
fields=["order"],
deferrable=Deferrable.DEFERRED,
)
デフォルトでは、制約は遅延 (DEFERRED) されません。遅延された制約は、トランザクションが終了するまで実行されません。即時 (IMMEDIATE) 制約は、すべてのコマンドの直後に実行されます。
includeLink to this heading
- UniqueConstraint.includeLink to this definition
ユニークなカバリングインデックス (covering index) に非キー列として含めるフィールド名のリストまたはタプル。これにより、include されたフィールドだけを SELECT するクエリと、 (include)、ユニークなフィールドだけでフィルタリングする(fields) クエリにインデックスだけのスキャンを使用できます。
例:
UniqueConstraint(name="unique_booking", fields=["room", "date"], include=["full_name"])
この設定では、room と date によるフィルタリング、full_name の SELECT の際にデータをインデックスからのみ取得します。
PostgreSQL以外のデータベースでは、非キー列を持つユニーク制約は無視されます。
非キーカラムは Index.include と同じデータベース制約を持ちます。
opclassesLink to this heading
- UniqueConstraint.opclassesLink to this definition
この一意なインデックスに使用する PostgreSQL operator クラス の名前です。カスタム演算子クラスが必要な場合は、インデックスの各フィールドに1つずつ指定しなければなりません。
例:
UniqueConstraint(
name="unique_username", fields=["username"], opclasses=["varchar_pattern_ops"]
)
これは username に varchar_pattern_ops を使用する一意なインデックスを作成します。
opclasses はPostgreSQL以外のデータベースでは無視されます。
nulls_distinctLink to this heading
- UniqueConstraint.nulls_distinctLink to this definition
ユニーク制約の対象となる NULL 値を含む行を、互いに異なる行とみなすかどうかを指定します。デフォルト値は None で、ほとんどのバックエンドで True となるデータベースのデフォルト値を使用します。
例:
UniqueConstraint(name="ordering", fields=["ordering"], nulls_distinct=False)
これは、 ordering カラムに NULL 値を格納できるのは1行だけというユニーク制約を作成します。
nulls_distinct によるユニーク制約は、PostgreSQL 15+ 以外のデータベースでは無視されます。
violation_error_codeLink to this heading
- UniqueConstraint.violation_error_codeLink to this definition
model validation 中に ValidationError が発生した場合に使用されるエラーコードです。
UniqueConstraint.condition が設定されているか、 UniqueConstraint.fields が設定されていない場合、デフォルトで BaseConstraint.violation_error_code になります。
UniqueConstraint.condition を伴わずに UniqueConstraint.fields が設定された場合、フィールドが複数あるときは Meta.unique_together のエラーコードがデフォルトとなり、フィールドが単一のときは Field.unique のエラーコードがデフォルトとなります。
violation_error_messageLink to this heading
- UniqueConstraint.violation_error_messageLink to this definition
model validation 中に ValidationError が発生した場合に使用されるエラーメッセージです。
UniqueConstraint.condition が設定されているか、 UniqueConstraint.fields が設定されていない場合、 BaseConstraint.violation_error_message がデフォルトになります。
UniqueConstraint.condition を伴わずに UniqueConstraint.fields が設定された場合、フィールドが複数あるときは Meta.unique_together のエラーメッセージがデフォルトとなり、フィールドが単一のときは Field.unique のエラーメッセージがデフォルトとなります。