Django モデルに複合ユニーク制約をつける方法

複数のカラムの組み合わせに対してユニーク制約をつけたい事があります。この制約は一般的に”複合ユニーク制約”といわれます。

今回は、Djangoで複合ユニーク制約を設定する方法を解説します。

複合ユニーク制約をつける方法

以下のSampleクラスは field1 と field2 のカラムに対して複合ユニーク制約をつけた例です。

MetaクラスのconstraintsオプションとUniqueConstraintを使う事で複合ユニーク制約をつける事ができます。

from django.db import models


class Sample(models.Model):
    field1 = models.CharField(max_length=100)
    field2 = models.CharField(max_length=100)
    
    class Meta:
        constraints = [
            models.UniqueConstraint(fields=['field1', 'field2'], name='unique_constraint')
        ]

constraintsについて

constraintsはメタデータオプションの一つで、DBの制約を定義できます。

モデルに定義したい制約をリスト形式で設定します。

UniqueConstraintについて

DBにユニーク制約を作成する事ができます。

キーワード引数のfieldsには、複合ユニークにしたいフィールド名のリストを設定します。

キーワード引数のnameには、制約の名前を設定できます。DBに制約名が反映されます。常に一意の名前にする必要があります。

補足 unique_togetherについて

メタデータオプションにunique_togetherを使って複合ユニーク制約をつける事もできますが、今後、非推奨になる可能性があります。

constrainsとUniqueConstraintを使って実装することをおすすめします。

スポンサーリンク
スポンサーリンク